leetcode single Number
来源:互联网 发布:力度exp5000编程方法 编辑:程序博客网 时间:2024/06/14 05:07
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
思路:
1.一个数和自己异或等于0;
2.一个数与0异或还是等于自己。
那么假设数组是{1,1,5,7,8,8,5}
1^1^5^7^8^8^5 = (1^1)^(5^5)^(8^8)^7=7
int singleNumber(int* nums, int numsSize) { int singleNumber =0; for(int i=0; i<numsSize;i++) { singleNumber ^= nums[i]; } return singleNumber;}
之前在剑指offer上看到一道变形题,如果一个数组有两个数出现一次,其他数都出现两次,那么怎么找出这两个数。
1.这是在考察知识迁移的能力,如果一个数我们可以利用上面结论。但是一个数组只能准确找出一个数,怎么办?考虑能否分成两个数组处理
2.如果有两个数只出现一次,那么所有元素异或出来的结果肯定不为0.
3.既然结果不为0,我们可以handle结果的二进制表达式,找到右边第一位“1”。(假设位于m位)。以这个1来划分数组。
4.m位是1的元素位于a1,m位是0的元素位于a2. 那么a1,a2所有元素异或出来的两个值,就是只出现一次的两个值。
然后今天做题遇到了这题:
Given an array of numbers nums
, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given nums = [1, 2, 1, 3, 2, 5]
, return [3, 5]
.
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */ unsigned int findFirstBitsIs1(int result){ int BitsCounter = sizeof(int)*8; unsigned int index; for(index=0;index<BitsCounter-1;index++) { if(result & 1) return index; result = result >>1; } return index;}bool BitsIs1( int sum,unsigned int BitsIndex){ return ((sum >> BitsIndex) & 1) ? true:false;} int* singleNumber(int* nums, int numsSize, int* returnSize) { if(nums==NULL || numsSize<=0) { *returnSize = 0; return; } int result=0; int a1=0,a2=0; *returnSize= 2; for(int i=0;i<numsSize;i++) { result ^= nums[i]; } unsigned int indexOf1 = findFirstBitsIs1(result); for(int i=0;i<numsSize;i++) { if(BitsIs1(nums[i],indexOf1)) a1 ^= nums[i]; else a2 ^= nums[i]; } int *results = malloc(sizeof(int)*(*returnSize)); results[0]=a1; results[1]=a2; return results; }
- leetcode Single Number & Single Number ||
- [LeetCode] Single Number
- Leetcode: Single Number
- Leetcode Single Number
- Single Number - leetcode
- Single Number II - leetcode
- Leetcode: Single Number II
- 【LeetCode】Single Number
- [LeetCode] Single Number II
- LeetCode: Single Number II
- LeetCode: Single Number
- leetcode -- Single Number II
- [leetcode]Single Number II
- [LeetCode] Single Number II
- [LeetCode]Single Number
- Leetcode Single Number
- 【leetcode】Single Number
- 【leetcode】Single Number II
- iPad 弹出照片控制器失败
- BOM
- 编写docker-compose.yml需要注意的问题
- Html5 canvas生成图片,通过java进行保存
- java 使用全局过滤器Filter之后 防止css文件与js文件被过滤
- leetcode single Number
- python中*args **kwargs的使用
- logrotate使用
- Spring定时任务的几种实现
- BOM属性
- Java中使用Jedis操作Redis
- uva 340
- light oj 1094 Farthest Nodes in a Tree(树的直径模板)
- WPF 数据验证失效 Validation Fail on TabControl