JSK-15 单独的数字【位运算】
单独的数字
给定一个数组 A,除了一个数出现一次之外,其余数都出现三次。找出出现一次的数。
如:{1,2,1,2,1,2,7},找出 7。
你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~
输入格式
第一行输入一个数 n(1≤n≤500),代表数组的长度。
接下来一行输入 n 个 int 范围内(−2147483648…2147483647)的整数,表示数组 A。保证输入的数组合法。
输出格式
输出一个整数,表示数组中只出现一次的数。
样例输入
4
0 0 0 5
样例输出
5
问题链接:JSK-15 单独的数字
问题描述:(略)
问题分析:
这个的难点在于要求算法复杂度为线性时间复杂度。那么像排序等算法就不可以用了。同时,要求不能使用额外空间,也就是最多声明一个数组,把原始数据存储起来。
采用位运算来解是一个好的主意。数是int类型,也就是一个32位的整数。那么把数组A的各个数将其二进制的各个位分别求和,然后再模除3就是单独数字的二进制位,再拼装成一个整数,就是单独的数字。
需要注意的一点是,C/C++语言的整数是补码表示,这并不影响计算结果。
程序说明:
没有必要将数组A的数存储在数组中,一边输入一边处理就可以了,可以节省存储。
参考链接:(略)
题记:位运算是常常要用到的。
AC的C语言程序如下:
/* JSK-15 单独的数字 */#include <stdio.h>
#include <string.h>#define N 32
int sum[N];int main()
{int n, a, i, j;memset(sum, 0, sizeof(sum));scanf("%d", &n);for(i = 1; i <= n; i++) {scanf("%d", &a);for(j = 0; j < N; j++) {sum[j] += (a >> j) & 1;sum[j] %= 3;}}int ans = 0;for(i = 0; i < N; i++)ans += sum[i] << i;printf("%d\n", ans);return 0;
}
JSK-15 单独的数字【位运算】相关推荐
- c语言交换两个数字 位运算_交换两个8位数字| 8086微处理器
c语言交换两个数字 位运算 Problem statement: 问题陈述: To swap two 8 bits numbers using third register on 8086 micro ...
- [Leedcode][JAVA][第136题][第137题][只出现一次的数字][位运算][HashSet][HashMap]
[问题描述][第136,137题][只出现一次的数字] 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了N次.找出那个只出现了一次的元素.[第136题]N= 2 输入: [2,2 ...
- 134. Leetcode 136. 只出现一次的数字 (位运算-只出现一次的数字相关题目)
class Solution:def singleNumber(self, nums: List[int]) -> int:res = 0for i in range(len(nums)):re ...
- JSK-115 单独的数字(二)【位运算】
单独的数字(二) 一个整型数组中有一个元素只出现一次,其它元素都出现两次.求出只出现一次的元素. 要求: 线性时间复杂度,不能使用额外空间. 聪明的你能搞定吗? 格式: 第一行输入数字n,代表有n个数 ...
- 位运算在一类数组题中的用法 只出现一次的数字I
文章目录 前言 复习 一:只出现一次的数字I 二:只出现一次的数字II 二:只出现一次的数字III 前言 LeetCode上有几道题特别相似,分别是leetcode 136只出现一次的数(简单),13 ...
- [剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]
[问题描述][中等] 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字.示例 1:输入:nums = [3,4,3,3] 输出:4 示例 2:输入:n ...
- 程序员面试金典 - 面试题 17.19. 消失的两个数字(数学/位运算)
1. 题目 给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字. 你能在 O(N) 时间内只用 O(1) 的空间找到它们吗? 以任意顺序返回这两个数字均可. 示例 1: 输入: [1] ...
- 剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)
文章目录 1. 题目 2. 解题 2.1 充分利用题目信息 2.2 位运算 2.3 二分查找 1. 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范 ...
- LeetCode 260. 只出现一次的数字 III(位运算)
1. 题目 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 :输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...
最新文章
- 安装mysql二进制文件_MySQL二进制文件规范安装
- 【转】测试用例编写(功能测试框架)
- .NET Remoting 分布式开发实例思想(转)
- 前端项目:基于Nodejs+vue开发实现酒店管理系统
- QQ群下载解除限速小技巧【提高千倍不止】【无需会员】
- 干货 | 携程数据血缘构建及应用
- nginx “504 Gateway Time-out”错误
- html五星评分标准,五星级酒店评分标准.doc
- 用计算机中的知识秀恩爱,教你用专业知识取情侣网名
- CODEVS 3977 炉石传说——圣骑士的逆袭
- 定时任务每隔10分钟
- 组态(Configuration)
- SIwave仿真入门 | PI篇——封装PDN参数仿真
- 【2020-10-28】DS12C887+驱动
- python怎么设置dos_Windows下Python环境的配置和Dos界面的调用
- 又一神作。Alibaba“M8级”架构师总结微服务与事件驱动架构启蒙手册
- 我们为什么要坚持写博客?
- Python-基于词典-中文分词算法
- Java、六边形面积
- Leetcode 435. Non-overlapping Intervals
热门文章
- C# 实现程序最小化到托盘
- mysql数据库增删改查关键字_Mysql数据库,增删改查笔记(非常重要)-阿里云开发者社区...
- c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...
- 设计模式(四)行为型模式
- java 向量点乘_向量的点乘与叉乘学习笔记
- 假设以带头结点的循环链表表示队列_真香!20张图揭开「队列」的迷雾,一目了然...
- Sklearn——用Sklearn实现K近邻分类(KNN)
- CUDA算法——Stream and Event
- Redis教程:事件、客户端和服务器
- 50道MySQL经典练习题