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

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

http://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8

方法1:使用哈希表存储不重复的数字

import java.util.HashMap;
public static void FindNumsAppearOnce1(int[] array,int[] num1,int[] num2){
        HashMap<integer,integer> map=new HashMap&lt;&gt;();
        for(int i=0;i<array.length;i++){ if(map.containskey(array[i])){ map.remove(array[i]); } else map.put(array[i],1); int a[]="new" int[array.length]; i="0;" for(int k : map.keyset()){ keyset()返回所有的键 a[i]="k;" i++; num1[0]="a[0];" num2[0]="a[1];" ``` public class solution { ** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 @param array int整型一维数组 @return int[] findnumsappearonce (int[] array) write code here hashmap<integer,integer> map=new HashMap&lt;&gt;();
        for(int i=0;i<array.length;i++){ if(map.containskey(array[i])){ map.put(array[i],map.get(array[i])+1); } else{ map.put(array[i],1); int i="0;" int[] arr="new" int[2]; for (entry<integer, integer> entry : map.entrySet()) {
            if(entry.getValue()==1){
                arr[i]=entry.getKey();
                i++;
            }
        }
        return arr;
    }
}

方法2:异或运算

把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。

    //------------没看懂-------------------
    public void FindNumsAppearOnce2(int [] array,int num1[],int num2[]) {
        int eO = 0,eOne = 0;
        for(int num:array)
            eO ^=num;
        int firstOne = eO &amp;(~eO +1);//求得二进制中第一位1,比如101和011得到010
        for(int cur:array)
            if ((cur&amp;firstOne) !=0) {//把第k位是1的一组找出来进行异或
                eOne ^=cur; 
        }//最终结果就是第k位是1且落单的那个
       num1[0] = eOne;
       num2[0] = eOne^eO;//异或结果的运算规则。
    }

</array.length;i++){></array.length;i++){></integer,integer>

剑指Offer题解 文章被收录于专栏

剑指Offer-Java版本题解

全部评论

相关推荐

02-19 22:55
南京大学 后端
给🐭🐭个面试机会吧:先别急,你投了就知道了,华为和字节的hr跟有指标一样到处捞人,你投完就不理你了
点赞 评论 收藏
分享
黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经410star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务