剑指Offer38 数组所有数字出现两次,只有两个出现了一次,找出这两个数字
/*************************************************************************
> File Name: 38_NumbersAppearOnce.cpp
> Author: Juntaran
> Mail: JuntaranMail@gmail.com
> Created Time: 2016年09月03日 星期六 10时50分32秒
************************************************************************/ #include <stdio.h> // 判断数字二进制从右往左第index位是不是1
bool isBit(int num, int index)
{
num = num >> index;
return (num & );
} // 所有数字出现两次,只有两个出现了一次,找出这两个数字
void FindNumsAppearOnce(int* nums, int length, int* num1, int* num2)
{
if (nums==NULL || length<=)
return; int temp = nums[];
// 第一遍异或
for (int i = ; i < length; ++i)
temp ^= nums[i]; // 从右向左寻找temp二进制第几位是1
int index = ;
while ((temp & ) == )
{
temp = temp >> ;
++ index;
} *num1 = ;
*num2 = ; // 分组异或
for (int i = ; i < length; ++i)
{
if (isBit(nums[i], index))
*num1 ^= nums[i];
else
*num2 ^= nums[i];
}
} int main()
{
int nums[] = {,,,,,,,};
int length = ;
int num1 = ;
int num2 = ;
FindNumsAppearOnce(nums, length, &num1, &num2);
printf("num1 is %d\nnum2 is %d\n", num1, num2);
return ;
}
剑指Offer38 数组所有数字出现两次,只有两个出现了一次,找出这两个数字的更多相关文章
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
		
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
 - 剑指offer-56数组中数字出现的次数
		
题目 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 输入:nums = [4,1,4,6] 输出 ...
 - 剑指Offer 数组中只出现一次的数字
		
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 因为有2个数字只出现了一次,而其他的数字都是2次,可以通过异或运算,得到最后这2个只 ...
 - 剑指Offer——数组中只出现一次的数字
		
题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 分析: 数组中一共有偶数个数.两个数字只出现过一次. 相同数异或在一起等于0,那么将所有数异或 ...
 - 剑指offer--35.数组中只出现一次的数字
		
时间限制:1秒 空间限制:32768K 热度指数:198150 本题知识点: 数组 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. class ...
 - 剑指Offer——数组中只出现一次的数字(一个很帅的异或解法)
		
题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 看题目脑子里就出现做法了: 遍历,用个HashMap来记录出现的次数,然后再遍历HashMap返回 ...
 - 剑指Offer-40.数组中只出现一次的数字(C++/Java)
		
题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 分析: 我们知道,两个相同的数字异或的结果等于0,所以利用这个性质将数组中所有的数字异或,求得的结 ...
 - 用java刷剑指offer(数组中只出现一次的数字)
		
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 牛客网链接 思路 链接:https://www.nowcoder.com/questionTer ...
 - 剑指offer40:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
		
1 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 2 思路和方法 (1)异或:除了有两个数字只出现了一次,其他数字都出现了两次.异或运算中,任 ...
 
随机推荐
- android开发中提示:requires permission android.permission write_settings解决方法
			
一.在Manifest.xml 中添加: <uses-permission android:name="android.permission.WRITE_CONTACTS" ...
 - OC: Block回调的使用demo
			
Block 的用法 对于类的继承问题,子类在实现的时候,一般是自下而上,先看看下面的实现没有,没实现就向上找方法去实现. // // main.m #import <Foundation/Fou ...
 - ASP.net 服务器监控
			
参考代码: 1,页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SMP ...
 - 一条结合where、group、orderby的linq语法
			
DataTable dt = (from x in dsResult.Tables[0].AsEnumerable() where DataTrans.CBoolean(x["IsCheck ...
 - 实用的树形菜单控件tree
			
jQuery plugin: Treeview 这个插件能够把无序列表转换成可展开与收缩的Tree. jQuery plugin: Treeview jQuery jstree jsTree ...
 - Qt中的 Size Hints 和 Size Policies
			
sizeHint 这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个 widget 该有多大,它的一个参考来源就是这个 sizeH ...
 - GridView实现多表头合并[转]
			
1.这里先介绍单纯的GridView多表头合并,先上图: 可以看到,上图就是生成的多表头,具体的后台代码是在Row_Created事件中创建的.先看创建代码: protected void GridV ...
 - 使用jQuery Mobile和Phone Gap开发Android应用程序
			
经过了一段时间的学习,初步了解了该如何使用jQuery Mobile和 Phone Gap来开发一个Android应用程序,也想把这些东西介绍给大家. 1. 软件准备 要进行android app的开 ...
 - IOS 7 Study - UIDatePicker
			
Picking the Date and Time with UIDatePicker effect: 1. declaring a property of type UIDatePicker #im ...
 - char.js专门用来做数据统计图
			
<canvas id="cashback" width="930" height="460"></canvas>&l ...