• leetcode — single-number-ii


    /**
     * Source : https://oj.leetcode.com/problems/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 class SingleNumber2 {
    
        /**
         * 数组中每个元素出现3次,只有一个元素出现一次,找出出现一次的元素
         *
         * 沿用SingleNumber的方法,比如:{1,1,1,2,2,2,3}
         * 01
         * 01
         * 01
         * 10
         * 10
         * 10
         * 11
         * ______
         * 44 对每一位求和
         * 11 每一位对3求余
         *
         * @param arr
         * @return
         */
        public int singleNumber (int[] arr) {
            int res = 0;
            for (int i = 0; i < 32; i++) {
                int sum = 0;
                int mask = 1<<i;
                for (int j = 0; j < arr.length; j++) {
                    if ((arr[j] & mask) != 0) {
                        sum ++;
                    }
                }
                res |= (sum % 3) << i;
            }
            return res;
        }
    
        public static void main(String[] args) {
            SingleNumber2 singleNumber2 = new SingleNumber2();
            System.out.println(singleNumber2.singleNumber(new int[]{1,1,1,2,2,2,3}) + " == 3");
            System.out.println(singleNumber2.singleNumber(new int[]{14,14,14,9}) + " == 9");
        }
    
    
    }
    
  • 相关阅读:
    Linux/UNIX编程:实现简单 tee 命令
    Java原子变量类需要注意的问题
    一种很有意思的数据结构:Bitmap
    Java实现简单井字棋
    分治算法学习
    使用栈实现表达式求值
    Web安全学习笔记——SQL注入
    【old】Python学习笔记
    函数1
    pycharm(Tip of Day)
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/7887186.html
Copyright © 2020-2023  润新知