单独的数字

给定一个数组 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 单独的数字【位运算】相关推荐

  1. c语言交换两个数字 位运算_交换两个8位数字| 8086微处理器

    c语言交换两个数字 位运算 Problem statement: 问题陈述: To swap two 8 bits numbers using third register on 8086 micro ...

  2. [Leedcode][JAVA][第136题][第137题][只出现一次的数字][位运算][HashSet][HashMap]

    [问题描述][第136,137题][只出现一次的数字] 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了N次.找出那个只出现了一次的元素.[第136题]N= 2 输入: [2,2 ...

  3. 134. Leetcode 136. 只出现一次的数字 (位运算-只出现一次的数字相关题目)

    class Solution:def singleNumber(self, nums: List[int]) -> int:res = 0for i in range(len(nums)):re ...

  4. JSK-115 单独的数字(二)【位运算】

    单独的数字(二) 一个整型数组中有一个元素只出现一次,其它元素都出现两次.求出只出现一次的元素. 要求: 线性时间复杂度,不能使用额外空间. 聪明的你能搞定吗? 格式: 第一行输入数字n,代表有n个数 ...

  5. 位运算在一类数组题中的用法 只出现一次的数字I

    文章目录 前言 复习 一:只出现一次的数字I 二:只出现一次的数字II 二:只出现一次的数字III 前言 LeetCode上有几道题特别相似,分别是leetcode 136只出现一次的数(简单),13 ...

  6. [剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]

    [问题描述][中等] 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字.示例 1:输入:nums = [3,4,3,3] 输出:4 示例 2:输入:n ...

  7. 程序员面试金典 - 面试题 17.19. 消失的两个数字(数学/位运算)

    1. 题目 给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字. 你能在 O(N) 时间内只用 O(1) 的空间找到它们吗? 以任意顺序返回这两个数字均可. 示例 1: 输入: [1] ...

  8. 剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)

    文章目录 1. 题目 2. 解题 2.1 充分利用题目信息 2.2 位运算 2.3 二分查找 1. 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范 ...

  9. LeetCode 260. 只出现一次的数字 III(位运算)

    1. 题目 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 :输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...

最新文章

  1. 安装mysql二进制文件_MySQL二进制文件规范安装
  2. 【转】测试用例编写(功能测试框架)
  3. .NET Remoting 分布式开发实例思想(转)
  4. 前端项目:基于Nodejs+vue开发实现酒店管理系统
  5. QQ群下载解除限速小技巧【提高千倍不止】【无需会员】
  6. 干货 | 携程数据血缘构建及应用
  7. nginx “504 Gateway Time-out”错误
  8. html五星评分标准,五星级酒店评分标准.doc
  9. 用计算机中的知识秀恩爱,教你用专业知识取情侣网名
  10. CODEVS 3977 炉石传说——圣骑士的逆袭
  11. 定时任务每隔10分钟
  12. 组态(Configuration)
  13. SIwave仿真入门 | PI篇——封装PDN参数仿真
  14. 【2020-10-28】DS12C887+驱动
  15. python怎么设置dos_Windows下Python环境的配置和Dos界面的调用
  16. 又一神作。Alibaba“M8级”架构师总结微服务与事件驱动架构启蒙手册
  17. 我们为什么要坚持写博客?
  18. Python-基于词典-中文分词算法
  19. Java、六边形面积
  20. Leetcode 435. Non-overlapping Intervals

热门文章

  1. C# 实现程序最小化到托盘
  2. mysql数据库增删改查关键字_Mysql数据库,增删改查笔记(非常重要)-阿里云开发者社区...
  3. c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...
  4. 设计模式(四)行为型模式
  5. java 向量点乘_向量的点乘与叉乘学习笔记
  6. 假设以带头结点的循环链表表示队列_真香!20张图揭开「队列」的迷雾,一目了然...
  7. Sklearn——用Sklearn实现K近邻分类(KNN)
  8. CUDA算法——Stream and Event
  9. Redis教程:事件、客户端和服务器
  10. 50道MySQL经典练习题