zoukankan      html  css  js  c++  java
  • LeetCode 笔记26 Single Number II

    Given an array of integers, every element appears three times except for one. Find that single one.

    Note:
    Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

    没辙,智商碾压题。楼主没遇到之前就只会这种做法。

    public int singleNumber(int[] A) {
            Map<Integer, Integer> counters = new HashMap<>();
            for(int i = 0; i < A.length; i++) {
                if (!counters.containsKey(A[i])) {
                    counters.put(A[i], 1);
                } else {
                    counters.put(A[i], counters.get(A[i]) + 1);
                }
            }
            
            for (Integer key : counters.keySet()) {
                if (counters.get(key) == 1) {
                    return key;
                }
            }
            throw new RuntimeException("no single number");
        }

    而后我们知道可以先声明个长度32的整形数组,int[32]。第i个元素存放“这些整数第i位的1的个数除以三的余数”。好拗口是不是?

    public int singleNumber2(int[] A) {
            int[] counter = new int[32];
            int ret = 0;
            for(int i = 0; i < 32; i++) {
                for (int j = 0; j < A.length; j++) {
                    counter[i] += (A[j] >> i) & 1;
                }
                ret |= (counter[i] % 3) << i;
            }
            return ret;
        }

    看了代码其实也不是“不明觉厉”。因为assume只有一个数出现一次,其他都出现3次,那么那个single number的第i位就是余下的那个数。

    。。。

    楼主中文不好。

    btw,还有一个不是很直观的位操作方法。贴这里吧,不过没做过这个的感觉很难想到。

    http://oj.leetcode.com/discuss/857/constant-space-solution 

  • 相关阅读:
    PHP伪造referer访问地址
    第一个伪静态(url重写)测试
    url重写(伪静态)IIS配置图解
    两个DropDownList数据绑定联动(数据库)
    PlaceHolder
    Page之IsPostBack属性
    确定删除吗?
    很喜欢的一个组合 因为他们的音乐改变了我对许多事物的看法SAVAGE GARDEN
    DragonBones 骨骼动画引擎
    关于Flash的Sockt通信与跨域文件
  • 原文地址:https://www.cnblogs.com/lichen782/p/4304406.html
Copyright © 2011-2022 走看看