本帖最后由 王亚运 于 2012-10-28 09:25 编辑
题目:
一个数组里,除了三个数是唯一出现的,其余的都出现偶数个,找出这三个数中的任一个。比如数组元素为【1, 2,4,5,6,4,2】,只有1,5,6这三个数字是唯一出现的,我们只需要输出1,5,6中的一个就行。
CSDN别人博客看得的
那位先生用的C写的,好吧,我不会C。
感兴趣可以看下。
地址:http://blog.csdn.net/w397090770/article/details/8032898
然后,我想了下用JAVA 写。
思路还算清晰。
几分钟就想出来。
七点半开始写,直到现在才成功。。。三个多小时。。
半个小时写完代码,写完大体,编译报错50多个。。。
当时想哭啊。。{:soso_e109:}
然后修改,不下10次,才算编译过去,
运行结果和预料的不一样,
在修改,又是N次,最后原因是最后的if语句,偷懒没加{},多谢了:导致的。。。教训
思路是:
1:创建一个新数组,用来记录要选择的数组每个元素出现的次数,
这里借助一个计数器,
特别注意计数器计数完毕需要归零,开始没注意,总是失败。。。
2:然后 选择性输出,出现次数为一次或者多次的元素。
不知道有没有说清楚。。
如图:
代码附上。。。
其他高手有其他算法可以交流。。。{:soso_e181:}- <p>
- /*
- 题目:一个数组里,除了三个数是唯一出现的,其余的都出现偶数个,
- 找出这三个数中的任一个。比如数组元素为【1, 2,4,5,6,4,2】,
- 只有1,5,6这三个数字是唯一出现的,
- 我们只需要输出1,5,6中的一个就行。
- */
- class screen{
-
- public void get(int[] arr)
- {
- //定义两个数组用来存储和记录 copy[] 用来复制一遍输入数组 record[] 用来存储数组相同元素出现次数
- //counter 用来记录出现次数
- int counter=0;
- int record[] = new int[arr.length];
- //遍历数组元素
- for (int x=0;x<arr.length;x++)
- {
- for (int y=0;y<arr.length;y++)
- {
- if(arr[x]==arr[y])//比较是否相同,本来还有选择性不和自身比较,最后比较懒,没写。。。
- {
- counter++;
- }
- }
- record[x]=counter; //用数组记录下元素出现次数
- counter=0;//计数器归零,很重要
- }
- System.out.println();
-
- //找到出现多次的元素
- //遍历数组
- //查看下定义的数组是否记录准确
- //System.out.print("record.lenth="+record.length) ;
-
- /*for (int x=0;x<arr.length;x++)
- {
- System.out.print("record ["+x+"]="+record [x]+",");
- System.out.println();
- }*/
- System.out.println();
- System.out.print("单次出现的元素是");
- for (int x=0;x<arr.length;x++)
- {
- if(record[x]==1)
- {
- System.out.print(arr[x]+",");
- }
- }
- }
-
- }
- public class screenText
- {
- public static void main(String[] args)
- {
- int arr[]={1, 2,4,5,6,4,2};
- screen sc=new screen();
- sc.get (arr);
- }
- }
复制代码 |