zoukankan      html  css  js  c++  java
  • 算法——数组中数字出现的次数(求两个只出现一次的数)

    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
    序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

    解题思路:

    1. 首先通过一次遍历,获取所有元素的异或值;
    2. 计算异或值中的一个值是1的位,这个位就是答案中两个数字的不同之处;
    3. 利用这个位,在于求部分元素的异或值,哪部分的元素呢?就是分别是这个位为1和0的两个部分,这样就把问题转化为求只出现一次的数字了。
    4. 看代码吧。
    class Solution {
        public int[] singleNumbers(int[] nums) {
            int temp = 0;
            int[] res = new int[2];
    
            for(int n : nums) {
                temp ^= n;
            }
    
            int k = 0;
    
            while(((temp >> k) & 1) == 0) k++;
    
            int temp2 = 0;
            for(int n : nums) {
                if(((n >> k) & 1) == 1) temp2 ^= n;
            }
    
            temp = 0;
            for(int n : nums) {
                if(((n >> k) & 1) == 0) temp ^= n;
            }
    
            res[0] = temp;
            res[1] = temp2;
    
            return res;
        }
    }
    
    
  • 相关阅读:
    mysql各个版本下载地址
    hadoop-0.20.2完全分布式集群
    04_Spring中使用Quartz
    03_CronTrigger
    02_SimpleTrigger
    02_ActiveMQ入门
    01_JMS概述
    01_Quartz基础结构
    Java开发高性能网站需要关注的事
    06_Jedis完成MySQL的条件查询案例
  • 原文地址:https://www.cnblogs.com/lippon/p/14117660.html
Copyright © 2011-2022 走看看