Leetcode-SingleNumber-创新互联

Single NumberI

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了黄龙免费建站欢迎大家使用!

Leetcode-Single Number

分析:这道题应该是很简单了,直接使用异或运算,把重复出现的数字消掉剩下的就是出现一次的元素

lass Solution {
    public int singleNumber(int[] nums) {
        int tmp = nums[0];
        for(int i = 1;i < nums.length;i++){
            tmp = tmp ^  nums[i];
        }
        return tmp;
    }
}

Single NumberII

Leetcode-Single Number

分析:这种题型可以归纳为一个数组中的元素某一元素只出现了K次,而其他元素均出现了M次,然后求出出现K次的元素问题。如果K

为奇数M为偶数,就跟上面第一题是一样的处理方式了;而其他情况则需要考虑使用位运算。我们知道,每个数字的二进制表示是一定的,所以我们通过计算每一位中1的个数,然后除3,若余数为0说明该位上为1的数都出现了三次,若余数不为0,说明我们要找的那个数字该位为1,通过移位运算实现上述过程。同理,若题目要求其他元素均出现了5次,就除5。

class Solution {
    public int singleNumber(int[] nums) {
        int ans = 0;
        for(int i = 0 ; i < 32 ; i++){
            int sum = 0;
            for(int j = 0 ; j < nums.length ; j++){
                if(((nums[j] >> i) & 1) == 1 ){
                    sum++;
                    sum %= 3;
                }
            }
            if(sum != 0){
                ans |= sum << i;//将循环中右移的位移回原位置
            }
        }
        return ans;
        
    }

Single NumberIII

Leetcode-Single Number

分析:数组中的无关元素出现了偶数次,所以先考虑用异或将它们消除,得到3和5的异或结果。然后我们考虑如何将3和5分离:3(011)和5(101)异或的结果为6(110),我们需要先找到3和5的二进制表示中不相同的一位,这里的方法就是6与-6进行相与,即110与其补码(取反加一)011相与,得到010(即从右往左3和5的第二位不同),我们姑且将它称为分离因子。然后遍历整个数组,每个数与该分离因子相与可将数组分为&x==0和&x!=0的两组,然后在每组内部进行异或运算,得到结果。

class Solution {
    public int[] singleNumber(int[] nums) {
        int diff = 0;
        for(int num : nums) {
            diff ^= num;
        }
        diff &= -diff;
        int[] res = new int[]{0,0};
        for(int i : nums) {
            if((diff & i) == 0) {
                res[0] ^= i;
            }
            if((diff & i) != 0) {
                res[1] ^= i;
            }
        }
        return res;
    }
}

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。

当前标题:Leetcode-SingleNumber-创新互联
文章分享:https://www.cdcxhl.com/article42/depehc.html

成都网站建设公司_创新互联,为您提供手机网站建设App开发建站公司网页设计公司Google搜索引擎优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

搜索引擎优化