从一个数组中寻找出现奇数次的数字
假设给定了数组nums为[0,1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,1,2,3,3,0]
其中3出现了3次
而其他数字都出现了两次
则我们应该得到结果为3
第一种方式:使用Hash
1 /** 2 * 使用hash 3 * */ 4 public static int singleNumber_1(int[] nums) { 5 Map<Integer, Integer> map = new HashMap<>(); 6 for(Integer num : nums) { 7 /* 8 * 1.remove与put操作相对耗费时间 9 * 10 * if(map.containsKey(num)) { 11 * map.remove(num); 12 * }else { 13 * map.put(num, 0); 14 * } 15 * **/ 16 if(map.get(num) != null) { 17 map.put(num, map.get(num)+1); 18 }else { 19 map.put(num, 1); 20 } 21 } 22 int result = -1; 23 for(Integer key : map.keySet()) { 24 if(map.get(key)%2 != 0) { 25 result = key; 26 } 27 28 } 29 return result; 30 }
View Code
第二种方式:使用^
1 /** 2 * 异或 3 * a^b^c^b^a = (a^a)(b^b)^c = 0^c = c 4 * */ 5 public static int singleNumber_2(int [] nums) { 6 int ans = nums[0]; 7 if (nums.length > 1) { 8 for (int i = 1; i < nums.length; i++) { 9 System.out.println(ans + "^" + nums[i] + ":"); 10 ans = ans ^ nums[i]; 11 System.out.println(ans); 12 } 13 } 14 return ans; 15 }
View Code
转载于:https://www.cnblogs.com/ttzsqwq/p/11465651.html
从一个数组中寻找出现奇数次的数字相关推荐
- 算法题:“找出单身狗”--找出一个数组中只出现一次的数字
题目:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次. 编写一个函数找出这两个只出现一次的数字. 解题过程以及思路:(思路在代码中以注释形式给出) //一个数组中只有两个数字是出现一次,其 ...
- C语言试题三十九之将s所指字符串中除了下标为奇数、同时ascii值也为奇数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。
1. 题目 请编写一个函数function,它的功能是:将s所指字符串中除了下标为奇数.同时ascii值也为奇数的字符外,其余的全都删除:串中剩余字符所形成的一个新串放在t所指的一个数组中. 2 .温 ...
- 有苦有乐的算法 --- 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两种数
题目 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两组数 例: [2,4,3,2,5,4] ⇒ [3,5] [1,4,6,3,7,8,3,2,1,2,6,6,7,8] ⇒ [6,4] ...
- 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分. 我们首先会想到常规方法:创建一个临时数组,遍历所给数组中的所有元素,将偶数 ...
- C语言:一个数组中只有两个数字是出现一次
1 //1.一个数组中只有两个数字是出现一次, 2 //其他所有数字都出现了两次. 3 //找出这两个数字,编程实现.a 4 5 //^=单独两个数的^结果 6 //单独出现的两个数不同位的标记 7 ...
- 牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案
牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案 题目描述 给出一个转动过的有序数组,你事先不知道该数组转动了多少 (例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2) ...
- 算法:数组中寻找两个数字的和等于固定值
数组中寻找两个数字的和等于固定值 下面为实现思路及代码 codes. // 思路 // 先进后出 两端逼近 // for example x + y = z 前置条件:z的值固定 // 故x固定 则y ...
- 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值
我觉得写得很清晰,希望没有侵犯作者的著作权,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一个数组中的两个数字,让这 ...
- java数组输入一个实数_用java!!输入五个数,保存到一个数组中,然后将... C语言,编写一个程序,从键盘输入5个数,算出总和......
导航:网站首页 > 用java!!输入五个数,保存到一个数组中,然后将... C语言,编写一个程序,从键盘输入5个数,算出总和... 用java!!输入五个数,保存到一个数组中,然后将... C ...
最新文章
- AutoLayout(自动布局)详细教程
- 配置Windows Server2008故障转移集群
- 力扣332. 重新安排行程(JavaScript)
- linux 修改分辨率lcd_如何在Ubuntu 12.04中为LCD添加显示分辨率? xrandr问题
- chattr和lsattr的基本用法
- 把苦难装在心里--《赢在中国》(2008-05-27)
- MESOS集群高可用部署
- android可以设计的软件,不懂APP如何设计?送你10条Android设计原则
- 新版税控注入方法及数据采集
- IIS开启了GZIP和XCACHE之后飞快
- 鸡兔同笼php编程,C语言鸡兔同笼问题
- ArcGIS操作系列(一)之地理配准
- 德鲁克:卓有成效管理者的5项基本能力
- es6字符串添加html标签,JavaScript_详解JavaScript ES6中的模板字符串,在 ES6 中引入了一种新的字符 - phpStudy...
- 炭黑是做什么用的 炭黑起什么作用
- “城市大脑”治城一年 杭州“变”了
- vue的proxyTable的地址代理和重定向,配合nginx的地址代理问题
- w7设置双显示器_win7如何设置双显示器
- 老男孩读PCIe之四:TLP类型
- Linux上 journal 可以删除吗?