剑指offer 40. 数组中只出现一次的数字
来源:互联网 发布:网络扁平化的优点 编辑:程序博客网 时间:2024/05/20 13:10
// 题目:输入一个递数组,所有数字都出现了两次出了两个数字之外,输出只出现一次的两个数字//解法1:类似桶排序,时间O(n),空间O(n)public class Main {public static void main(String[] args) throws Exception {findSum(new int[]{2,4,3,6,3,2,5,5});}public static void findSum(int[] input) {int[] count = new int[999];for(int i = 0;i<input.length;i++){if(count[input[i]] == 0){count[input[i]]++;}else{count[input[i]]--;}}for(int i = 0;i<count.length;i++){if(count[i] == 1){System.out.println(i);}}}}//解法2:使用抑或的方式进行只出现一次的数字筛选,先找到两个唯一的数字二进制有哪位不同,在根据第一位不同的数字进行挑选public class Main {public static void main(String[] args) throws Exception {findSum(new int[]{2,4,3,6,6,9,3,2,5,5});}public static void findSum(int[] input) {int sum = 0;int result1 = 0;int result2 = 0;for(int i = 0;i<input.length;i++){sum = sum ^ input[i];}int firstDiff = findFirstDiff(sum);for(int i = 0;i<input.length;i++){if(isDiff(input[i], firstDiff)){//如果属于第一类就与第一类进行抑或result1 = result1 ^ input[i];}else{//否则与第二类抑或result2 = result2 ^ input[i];}}System.out.println(result1+" "+result2);}public static int findFirstDiff(int sum){//判断两个唯一的数从右向左第一个不同的二进制位是第几位int result = 1;while((sum & 1) != 1){ result++;sum = sum>>1;}return result;}public static boolean isDiff(int sum, int index){//判断一个二进制数第index为是否为1while(index != 1){sum = sum>>1;index--;}if((sum & 1) == 1){return true;}else{return false;}}}
0 0
- [剑指Offer]40.数组中只出现一次的数字
- 剑指offer 40. 数组中只出现一次的数字
- 剑指offer-40.数组中只出现一次的数字
- 剑指offer-40.数组中只出现一次的数字
- 剑指offer--数组中只出现一次的数字
- 剑指Offer之 - 数组中只出现一次的数字
- 剑指offer-40 数组中只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- 剑指offer 40-数组中只出现一次的数字
- 《剑指offer》数组中只出现一次的数字
- 剑指offer—数组中只出现一次的数字
- 【剑指offer】之数组中只出现一次的数字
- [剑指offer-1351]数组中只出现一次的数字
- 剑指offer:数组中只出现一次的数字
- 剑指offer 40 数组中只出现一次的数字
- 剑指offer:数组中只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- [剑指offer]数组中只出现一次的数字
- 基于《Selenium 2自动化测试实战》的学习笔记(1)—— 软件测试分类
- 线程学习总结-----/*自己编写*/
- Jquery 表单校验注册+购物车
- mongodb 访问权限控制
- 账号已被停用,请咨询系统管理员
- 剑指offer 40. 数组中只出现一次的数字
- [android]Gradle 应用插件︰ com.google.gms.google 服务
- [C++]bitset类用法
- 数据库链接错误,有可能不是用户名密码的问题
- 最全的Java笔试题库之选择题篇-总共234道【181~234】
- 内心空明
- O(n)回文子串(Manacher)算法
- Oracle-ORA-01722:invalid number-解决GAT项目中车辆维修Bug
- Mybatis介绍之参数传递