剑指Offer-40
来源:互联网 发布:winebottler mac 下载 编辑:程序博客网 时间:2024/05/12 18:02
题目:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。
找出只出现一次的数字,要求时间复杂度是 O(n) 空间复杂度是 O(1)。
实现
// coding = javapublic class Solution40 { //用 Hashmap 的方式,时间复杂度为 O(n),但是空间复杂度为 O(n) public static void findNums1(int[] nums){ if(nums==null && nums.length<1){ System.out.print("数组为空"); return; } HashMap dic = new HashMap<Integer,Integer>(); for(int i =0;i<nums.length;i++){ if(dic.containsKey(nums[i])){ dic.put(nums[i],2); } else{ dic.put(nums[i],1); } } for(int i=0;i<nums.length;i++){ int count = (int)dic.get(nums[i]); if(count==1){ System.out.println(nums[i]); } else{ continue; } } System.out.println("************"); } public static void findNums2(int[] nums){ if(nums==null && nums.length<1){ System.out.print("数组为空"); return; } int temp = 0; for(int i=0;i<nums.length;i++){ temp^=nums[i]; } int index = getFirstBitOf1(temp); int result1=0; int result2=0; for(int i=0;i<nums.length;i++){ temp = nums[i]>>index; if((temp&1)==1){ result1^=nums[i]; } else{ result2^=nums[i]; } } System.out.format("%d, %d",result1,result2); } public static int getFirstBitOf1(int num){ int index = 0; while ((num&1)!=1 && index<32 ){ num=num>>1; index++; } return index; } public static void main(String[] args){ int[] data={1,2,3,3,4,4,5,5}; findNums1(data); findNums2(data); }}
阅读全文
0 0
- 剑指Offer --> Question 40
- 【36-40】剑指offer
- 剑指offer(21-40)
- 剑指Offer-40
- 剑指offer(31-40)
- 【剑指offer】31-40题
- 剑指offer 试题31~40
- 剑指OFFER
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 用普通的form表单提交数据到后台显示乱码
- Swift
- setlocale 多线程调用引发程序crash
- 获取视频真实地址的初中高三个阶段
- 如何通过Windows Server 2008 R2建立NFS存储
- 剑指Offer-40
- 浅谈 安卓增量更新
- IOS学习 导入第三方框架 常见问题汇总
- selenium3.4 在不确定页面上某类web元素的数量的情况下,遍历元素
- 关于解决难倒一大片祖国花骨朵的caffe安装 error MSB4062 加载任务“NuGetPackageOverlay”失败问题
- svm核函数的理解和选择
- 给初学者的RxJava2.0教程(九)
- 使用了JDK自带的jconsole查看Tomcat运行情况
- 设计模式系列(11)抽象工厂模式