zoukankan      html  css  js  c++  java
  • 260. Single Number III

    package LeetCode_260
    
    /**
     * 260. Single Number III
     * https://leetcode.com/problems/single-number-iii/description/
     *
     * Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
    
    Example:
    Input:  [1,2,1,3,2,5]
    Output: [3,5]
    
    Note:
    The order of the result is not important. So in the above example, [5, 3] is also correct.
    Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
     * */
    class Solution {
        fun singleNumber(nums: IntArray): IntArray {
            /*
            * solution 1: HaspMap
            * Time complexity:O(n), Space complexity:O(n)
            * */
            /*val result = IntArray(2)
            val map = HashMap<Int, Int>()
            for (num in nums) {
                map.put(num, map.getOrDefault(num, 0) + 1)
            }
            var index = 0
            for (m in map) {
                if (m.value == 1) {
                    result.set(index, m.key)
                    index++
                }
            }*/
    
            /*
            solution 2: xor
            Time complexity:O(n), Space complexity:O(1)
            * */
            val result = IntArray(2)
            var flag = nums[0]
            //1,2,1,3,2,5
            for (i in 1 until nums.size) {
                flag = flag xor nums[i]
            }
            var x = 0
            var y = 0
            val setBitNumber = flag and (flag - 1).inv()
            for (n in nums) {
                if ((n and setBitNumber) != 0) {
                    x = x xor n
                } else {
                    y = y xor n
                }
            }
            result[0] = x
            result[1] = y
            return result
        }
    }
  • 相关阅读:
    Angular2与Angular1的区别
    JS的浅拷贝与深拷贝
    浅谈js的事件冒泡和事件捕获
    JS中的call、apply、bind方法
    WEB前端性能优化常见方法
    开放定址法——线性探测(Linear Probing)
    分离链接法(Separate Chaining)
    概观散列函数
    散列——动机引入
    AVL重平衡细节——插入
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13190203.html
Copyright © 2011-2022 走看看