`
leonard1853
  • 浏览: 84575 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LeetCode 137. Single Number II

阅读更多

再来一道,刷简单题。

 

137. 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?

 

题目思路和136一致,只需要将步长设为3即可,分析过程见我blog

http://leonard1853.iteye.com/blog/2275626
  
public class Solution {
    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        
        int index = 0;
        while(index < nums.length - 2) {
            if (nums[index] - nums[index + 1] == 0 && nums[index] - nums[index + 2] == 0) {
                index += 3;
            } else {
                return nums[index];
            }
        }
        return nums[index];
    }
}

 

 

1
0
分享到:
评论
2 楼 leonard1853 2016-02-22  
mrpanyu 写道
也是基于“异或”那种思路,用三进制不进位加法

三进制不太好写,以下代码是二进制三进制混用

Integer[] arr = new Integer[] { 3, 3, 3, 4, 4, 4, 5, 5, 5, 7, 7, 7, 9, 11, 11, 11, 13, 13, 13 };
List<Integer> list = Arrays.asList(arr);
Collections.shuffle(list); // 打乱顺序
System.out.println(Arrays.toString(arr));

// 下面是实际计算部分
byte[] data = new byte[32];
for (int i = 0; i < arr.length; i++) {
int num = arr[i];
String strBinaryNum = Integer.toBinaryString(num);
int leadingZeros = Integer.numberOfLeadingZeros(num);
for (int j = leadingZeros; j < 32; j++) {
byte x = data[j];
char y = strBinaryNum.charAt(j - leadingZeros);
if (y == '1') {
x++;
if (x == 3) {
x = 0;
}
data[j] = x;
}
}
}

StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.length; i++) {
sb.append(data[i]);
}

int singleNum = Integer.parseInt(sb.toString(), 2);
System.out.println(singleNum);

非常赞哦,领教了!
1 楼 mrpanyu 2016-02-05  
也是基于“异或”那种思路,用三进制不进位加法

三进制不太好写,以下代码是二进制三进制混用

Integer[] arr = new Integer[] { 3, 3, 3, 4, 4, 4, 5, 5, 5, 7, 7, 7, 9, 11, 11, 11, 13, 13, 13 };
List<Integer> list = Arrays.asList(arr);
Collections.shuffle(list); // 打乱顺序
System.out.println(Arrays.toString(arr));

// 下面是实际计算部分
byte[] data = new byte[32];
for (int i = 0; i < arr.length; i++) {
int num = arr[i];
String strBinaryNum = Integer.toBinaryString(num);
int leadingZeros = Integer.numberOfLeadingZeros(num);
for (int j = leadingZeros; j < 32; j++) {
byte x = data[j];
char y = strBinaryNum.charAt(j - leadingZeros);
if (y == '1') {
x++;
if (x == 3) {
x = 0;
}
data[j] = x;
}
}
}

StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.length; i++) {
sb.append(data[i]);
}

int singleNum = Integer.parseInt(sb.toString(), 2);
System.out.println(singleNum);

相关推荐

    颜色分类leetcode-leetcode.etc:OJ、leetcode等解决方案

    颜色分类leetcode leetcode.etc My solutions of the problems in Online judge website, leetcode, lintcode, etc. leetcode: 13 problems solved lintcode: 49 problems solved Title URL Solution Difficulty ...

    LeetCode最全代码

    137 | [Single Number II](https://leetcode.com/problems/single-number-ii/) | [C++](./C++/single-number-ii.cpp) [Python](./Python/single-number-ii.py) | _O(n)_ | _O(1)_ | Medium ||| 190 | [Reverse Bits]...

    leetcode Single Number II - 位运算处理数组中的数 - 代金桥 - 博客园1

    扩展二:给定一个包含n个整数的数组,有一个整数x出现b次,一个整数y出现c次,其他所有的数均出现a次,其中b和c均不是a的倍数,找出x和y。中每一位二进制位1出

    leetcode答案-leetcode-java:leetcode的Java代码

    leetcode 答案leetcode-java leetcode.com ...II Remove Duplicates from Sorted List com.leetcode.string Single Number com.leetcode.tree Balanced Binary Tree Maximum Depth of Binary Tree Same Tree

    LeetCode去除数组重复元素-Arithmetic-Swift:一些算法的swift实现

    LeetCode去除数组重复元素 Arithmetic-Swift 一些算法的swift实现 桶排序 冒泡排序 快速排序 ##正好看见LeetCode可以刷Swift的题目 开始慢慢刷 swift有playground 做起来还是相当方便的 已完成题目 ----2016.9.30 两...

    LeetCode:LeetCode题解

    LeetCode LeetCode题解 传送门 # 标题 解决方案 困难 笔记 1个 简单的 ... Remove_Duplicates_From_Sorted_Array_II ... Best_Time_To_Buy_And_Sell_StockII ... Single_NumberII Java 中等的 167 Two_Sum_II_Input_

    leetcode切割分组-leetcode:leetcode

    136_single_number.py # 位操作:异或(xor)操作 x ^ 0 = x; x ^ x = 0 sum 001_two_sum.py # 求list中能加和成指定值的两个位置 015_3_sum**.py # 求list中能加和成0的三个值 数列 004_median_of_two_sorted_arrays....

    Leetcode的ac是什么意思-LeetCodeInJava:leetcode-java

    Leetcode的ac是什么意思 LeetCodeInJava List #98 Validate Binary Search Tree #100 Same Tree #104 Maximum Depth of Binary Tree #122 Best Time to Buy and Sell Stock II #136 Single Number #150 Evaluate ...

    LeetCode2 Add Two Numbers

    The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading ...

    leetcode分类-LeetCode:LeetCode在线裁判C++

    SingleNumber 其他算法 各种SingleNumber变种 LinkListCycle I II 其他变种 编程之美 Preorder Traversal Inorder Traver sal postorder 非递归 不用栈! 字符串常用操作 字符串 各种转换 Pow(x,n) 优化 ...

    LeetCode:LeetCode解决方案

    preorder-traversal链表reorder-list链表linked-list-cycle-ii链表linked-list-cycle动态规划word-break-ii动态规划word-break链表copy-list-with-random-pointer复杂度single-number-ii复杂度single-number动态规划

    add-two-numbers

    The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading ...

    leetcode和oj-leetCode:尝试一些OJ

    Single Number 52.2% Easy 371 两个整数的和 51.6% Easy 104 二叉树的最大深度 50.1% Easy 325% Add the Easy 389.数字 49.9% 简单 226 反转二叉树 48.9% 简单 283 移动零点 46.9% 简单 404 左叶总和 45.5% 简单 383...

    leetcode蓄水池JAVA-leetcode-with-[removed]:wrapped_gift:用各种解决方案和单元测试来练习Leetcode

    https://leetcode.com/problems/single-number/ level : - easy tags : - recursive - linked list solutions : - reverseList - runtime : 52 ms, beats 99.80% - memory : 35 MB, beats 47.37% - ...

    leetcode添加元素使和等于-LeetCode:力扣唱片

    leetcode添加元素使和等于 LeetCode LeetCode Record 归并快排的区别: 思想不同:归并从局部到整体,快排从整体到局部 ...number. How? First, we need to understand the properties of XOR: firstly, XOR'

    dna匹配leetcode-leetcode:leetcode刷题

    dna匹配 leetcode leetcode刷题--C++ ...Single Number 异或 Copy List with Random Pointer 单链表 map Max Points on a Line 斜率 map, int&gt; Fraction to Recurring Decimal map long long 正负号 Repeated DNA S

    leetcode答案-leetcode:leetcode

    II mod之后,可能数学公式就不能简单地给出答案了。但对我来说,其实和前一题没区别。动态规划处理这种问题,早就是牛刀杀鸡了。。 Single Number 碰巧我知道异或的解法。如果不知道的话,想想还是有点费事的。 ...

    leetcode添加元素使和等于-LeetcodePractice:力码练习

    single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Input: (2 -&gt; 4 -&gt; 3) + (5 -&gt; 6 -&gt; 4) ...

    leetcoderuntimeerrorjava-leetcode:面试准备的数据结构和算法

    singleNumber ( self , nums : List [ int ]) -&gt; int : 它是所谓的“类型提示”(或“函数注释”;自 Python 3.0 起可用)。 -&gt; List[int] 意味着函数应该返回一个整数列表。 nums: List[int], target: int 表示 ...

    leetcode双人赛-java_leetcode:java打印letcode

    number. 向后遍历数组,直到获得两个数的和是给定的值 You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single...

Global site tag (gtag.js) - Google Analytics