zoukankan      html  css  js  c++  java
  • leetcode刷题笔记 260题 只出现一次的数字 III

    leetcode刷题笔记 260题 只出现一次的数字 III

    源地址:260. 只出现一次的数字 III

    问题描述:

    给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

    示例 :

    输入: [1,2,1,3,2,5]
    输出: [3,5]
    注意:

    结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
    你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

    /*
    对于可重复出现2次或偶数次的数,需要考虑到异或方法
    由于本题存在两个只出现一次的数,因此对全部数异或的话,最终结果为两个只出现一次的数的异或
    由于这两个数不相同,其二进制表达至少存在一位不同
    对ab异或结果逐位与1取,获取区别位
    而后对整个nums总右移K位(即区别位)与1取或值为0 或为1的所有数进行异或,最终结果可以分别得到两个只出现一次的数
    */
    object Solution {
        def singleNumber(nums: Array[Int]): Array[Int] = {
            var ab = 0
            for (num <- nums) {
                ab ^= num
            }
            
            var k = 0
            while ((ab >> k & 1) == 0) k += 1
    
            def get(nums: Array[Int], k: Int, t: Int): Int = {
                var res = 0
                for (num <- nums) {
                    if ((num >> k & 1) == t){
                        res ^= num
                    } 
                }
                return res
            }
    
            return Array(get(nums, k, 0), get(nums, k, 1))
        }
    }
    
  • 相关阅读:
    FastMM、FastCode、FastMove的使用(图文并茂)
    12种JavaScript MVC框架之比较
    十款最佳Node.js MVC框架
    Couchbase 服务器
    C#程序员阅读的书籍
    ORM的实现
    Linux内核策略介绍
    ASP.NET MVC + EF 利用存储过程读取大数据
    面向.Net程序员的dump分析
    动态加载与插件化
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13925320.html
Copyright © 2011-2022 走看看