C++找数组中只出现一次的两个数并保存(牛客剑指offer)

////////////////////////////////////
//一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 

//心得:开始我以为是只出现一次的一个数,题中确是有2个只出现一次的数
//数组从i=0,开始,另一个j=i+1开始,当出现一个相等的我就把它保存在我新建的数组里面b[n/2+1],
//当j==n时,说明在i位置之后没有跟a[i]相等的数值了,但是不能保证前面没有,
//于是这里我保存在b数组里面的数据就起作用了,再遍历一遍b数组,如果b数组里面依然没有找到相同
//的数字,我们就得到这个只出现一次的数字.这时就可以保存它,然后再求下一个.
//剑指offer完美通过.
#include <iostream>
using namespace std;
void Grial(int a[],int n)
{
	int b[n/2+1];
	int i = 0;
	int k = 0 ;
	for(;i<n;i++)
	{
		int j ;
		for(j = i+1 ; j<n;j++)
		{
			if(a[i]==a[j])
				{
				b[k++]=a[i];
				break;
				}
		}
		int m = 0 ;
		if(j>=n)
		{
			for(;m<k;m++)
			{
				if(a[i]==b[m])
					break;
			}
		}
		if(m>=k && j>=n)
		{
			cout<<a[i]<<endl;//将A[i]存储到*num1,*num2中就是剑指offer中的结果.
		}
	}
}
int main()
{
	int a[]={1,1,2,3,4,4};
	Grial(a,6);
	return 0;
}

时间: 2024-10-11 04:07:50

C++找数组中只出现一次的两个数并保存(牛客剑指offer)的相关文章

剑指Offer 面试题40:数组中只出现一次的两个数 题解

面试题40:数组中只出现一次的两个数 提交网址:  http://www.nowcoder.com/practice/e02fdb54d7524710a7d664d082bb7811?tpId=13&tqId=11193 或 http://ac.jobdu.com/problem.php?pid=1351 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 牛客网OJ的输入输出接口是:void Fin

C++中求数组连续子向量的最大和(牛客剑指offer)

/////////////////////////////////////////////////////////////////// //HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学. //今天测试组开完会后,他又发话了:在古老的一维模式识别中, //常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决. //但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢? //例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开

C++数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。(牛客剑指offer)

///////////////////////////////////////////////////////// //数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. //例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}. //由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. #include <iostream> using namespace std; int Grial(int a[],int n) { if(n==0)return -1;

C++找字符串中第一个只出现一次的的字符下标(牛客剑指offer)

#include <iostream> #include <string.h> using namespace std; int FirstNotRepeatingChar(string str) { int n = str.length(); if(n<1 || n>10000)return -1; int i = 0; for(;i<n;i++) { int j; int k; for(j=i+1;j<n;j++) { if(str[i]==str[j]

《剑指offer》第五十六题I:数组中只出现一次的两个数字

// 面试题56(一):数组中只出现一次的两个数字 // 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序 // 找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). #include <cstdio> unsigned int FindFirstBitIs1(int num); bool IsBit1(int num, unsigned int indexBit); void FindNumsAppearOnce(int data[], int

73. 数组中只出现一次的两个数字

异或运算,看视频吧.AcWing 73. 数组中只出现一次的两个数字 https://www.acwing.com/solution/acwing/content/1324/ 假设这2个数为x,y 1.对所有数进行异或,相同的2个数执行异或后的值为0.结果就是x⊕y. 2.异或运算的性质:.若a是二进制数0101,b是二进制数1011:则a⊕b=1110 ,只有在两个比较的位不同时其结果是1,否则结果为0. 可以肯定的是,x⊕y的结果有某一位k是1.利用第k位是1,将数组分成2类数组,数组m是Z

C语言编程 找出数列中只出现一次的两个数

原题:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.找出这两个只出现一次的数字,编程实现. 此题要用到在数列中找出只出现一次的一个数字的方法参考https://blog.51cto.com/14232799/2382172 此题明显无法一次性将两个数都找出,所以需要将数列分为两部分,每一部分有一个只出现一次的数,那么此时需要的就是分离数列的条件. 沿用找出一个数时的思想,将数列进行相互异或,但这次所得的值不是只出现一次的那个数了,因为只出现一次的数有两个,所以此次计算得到的是只出现

找出一组数中只出现一次的两个数,其他所有数都是成对出现的

题目: 给一组数,只有两个数只出现了一次,其他所有数都是成对出现的.怎么找出这两个数.编写函数实现. 题目分析: 上次介绍了,对于一组数中只有一个数只出现一次,其他所有数都是成对出现的,我们采用了对全部数组元素进行异或,但是对于找出两个出现一次的数应该怎么解决呢?先对所有的元素进行异或,则结果为两个出现一次的数的异或结果,然后将结果转换为二进制,找出二进制数中的第一个1,然后根据这个1的判断条件进行分组,分为两组,分别对两个组的元素进行全部异或,则就找出两个不同的数. 例如:数组中的元素为下面这

数组中只出现一次的两个数字

题目:给定一个整型数组,其中有两个数字只出现一次,其余的数字都出现两次,找出这两个只出现一次的数字.时间复杂度为O(n),空间复杂度为O(1). 异或运算的特性:相等的两个整数异或的结果为0:一个整数与0进行异或运算的结果为其本身. 基本思想:将这两个只出现一次的数字分到两个数组中,这样就很容易找到只出现一次的数字. 采用上述思想需要解决的问题: 1.如何才能保证两个只出现一次的数字分别位于两个数组? 2.空间复杂度为O(1),需要在原数组上进行分割操作,这个如何做到? 解决办法: 1.将数组中