Single Number II 除了一个元素外其他元素都出现3次 @LeetCode
来源:互联网 发布:羊绒品牌 知乎 编辑:程序博客网 时间:2024/05/21 10:57
第一种方法Hashtable好想,第二种要用到bit vector
package Level3;import java.util.Hashtable;import java.util.Set;/** * 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?Discuss * */public class S129 {public static void main(String[] args) {int[] A = {7,5,4,4,4,5,5};System.out.println(singleNumber(A));System.out.println(singleNumber2(A));}// Time: O(n), space: O(n)public static int singleNumber(int[] A) {Hashtable<Integer, Integer> ht = new Hashtable<Integer, Integer>();for(int i=0; i<A.length; i++){Integer val = ht.get(A[i]);if(val != null){ht.put(A[i], val+1);}else{ht.put(A[i], 1);}}Set<Integer> set = ht.keySet();for (Integer i : set) {if(ht.get(i) != 3){return i;}}return 0;}// Time: O(n), space: O(1)// 基本思想是每个数都可以表示成二进制形式,进而统计每个数在每一位出现的次数public static int singleNumber2(int[] A) {// 创建一个长度为32的数组countsPerBit,// countsPerBit[i]表示A中所有数字在i位出现的次数int[] countsPerBit = new int[32];int result = 0;for(int i=0; i<32; i++){for(int j=0; j<A.length; j++){if(((A[j] >> i) & 1) == 1){countsPerBit[i] = (countsPerBit[i] + 1) % 3;}}result |= (countsPerBit[i] << i);}return result;}}
Ref:http://www.mitbbs.com/article_t/JobHunting/32547143.html
import java.util.*;public class Solution { public int singleNumber(int[] A) { int[] buf = new int[32]; for(int i=0; i<32; i++){ int cnt = 0; int p = 1; p <<= i; for(int j=0; j<A.length; j++){ int tmp = A[j]; if((tmp & p) != 0){ //!!! cannot use ==1 cnt++; } } buf[i] = cnt%3; } int res = 0; for(int i=0; i<32; i++){ res |= (buf[i] << i); } return res; } public int singleNumber2(int[] A) { Hashtable<Integer, Integer> ht = new Hashtable<Integer,Integer>(); for(int i=0; i<A.length; i++){ Integer val = ht.get(A[i]); if(val != null){ ht.put(A[i],val+1); }else{ ht.put(A[i],1); } } for(Integer key : ht.keySet()){ if(ht.get(key) != 3){ return key; } } return -1; }}
- Single Number II 除了一个元素外其他元素都出现3次 @LeetCode
- 位运算-Single Number II(给定一个数组,除了一个数字出现一次,其他都出现三次,求出现一次的数)
- No.6 Single Number II 一组数都出现n次除了某个数,找出这个数
- 找出除一个数只出现一次外其他数都出现两次的数Single Number II
- 一个数组有除了两个元素只出现一次,其他元素全部都出现了两次,请找出只出现一次的两个元素,并输出
- leetcode:给定一个整数数组,除了一个元素外,每个元素都会出现两次。找到那一个。
- 一个数组除了一个元素只出现一次,其他元素全都出现了三次,输出出现一次的元素
- 一组整数中,除了一个数,其他数都出现了3次或以上,找出这个数
- 给定整数数组,除了一个元素之外,每个元素都出现三次。 找到那个只出现一次的数
- Single Number II - leetcode
- Leetcode: Single Number II
- [LeetCode] Single Number II
- LeetCode: Single Number II
- leetcode -- Single Number II
- [leetcode]Single Number II
- [LeetCode] Single Number II
- 【leetcode】Single Number II
- LeetCode:Single Number II
- HDU 2047 阿牛的EOF牛肉串 (递推)
- C++虚函数、虚继承、对象内存模型
- 【ABAP】Field Symbol使用总结
- [LeetCode] Candy
- YUV主要采样格式理解
- Single Number II 除了一个元素外其他元素都出现3次 @LeetCode
- servlet基本知识点
- 【ABAP】ABAP OO使用总结
- javascript 表单校验器
- C中的volatile用法
- 使用NCL绘制安徽省的轮廓图
- Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)
- Log4j的原理与使用
- How to install LAMP (Apache/PHP/MySQL)?