`
leonard1853
  • 浏览: 85291 次
  • 性别: 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 Single Number II - 位运算处理数组中的数 - 代金桥 - 博客园1

    《位运算处理数组中的数——以LeetCode Single Number II为例》 在计算机科学中,位运算是一种高效且灵活的数据处理手段,尤其在处理数组中特定数值的问题时,它能展现出强大的能力。LeetCode上的Single Number II...

    python-leetcode题解之137-Single-Number-II

    python python_leetcode题解之137_Single_Number_II

    颜色分类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]...

    js-leetcode题解之136-single-number.js

    javascript js_leetcode题解之136-single-number.js

    python-leetcode题解之136-Single-Number

    python python_leetcode题解之136_Single_Number

    Leetcode book刷题必备

    34. Single Number II:找出数组中唯一不出现一次的数字,数组中每个数字出现三次。 【杂项】 35. Spiral Matrix:螺旋遍历矩阵。 36. Integer to Roman:整数转换成罗马数字。 37. Roman to Integer:罗马数字转换...

    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

    php-leetcode题解之只出现一次的数字.zip

    function singleNumber($nums) { $result = 0; foreach ($nums as $num) { $result ^= $num; } return $result; } ``` 这段代码中,`$result`初始值为0,然后遍历数组`$nums`,对每个元素执行异或操作,最终...

    leetcode简单+中等题目参考答案java版

    public int singleNumber(int[] nums) { int res = 0; for (int n : nums) { res = res ^ n; } return res; } ``` **解析:** 这段代码巧妙地利用了异或运算的特性来解决问题。异或运算有以下特点: 1. 任何数...

    C++:异或运算符大全

    vector&lt;int&gt; singleNumber(vector&lt;int&gt;& nums) { int xor_two = nums[0]; int last_bit = 0; vector&lt;int&gt; result = {0,0}; for(int i = 1; i &lt; nums.size(); i++) xor_two ^= nums[i]; last_bit = xor_two & ...

    python-leetcode面试题解之第137题只出现一次的数字II-题解.zip

    在本压缩包中,我们关注的是一个Python编程与LeetCode面试相关的题目——“只出现一次的数字II”(Single Number II)。这是一道常见的数据结构与算法问题,常常出现在求职面试中,对于考察应聘者对位操作、哈希表...

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

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

    python-leetcode面试题解之第136题只出现一次的数字-题解.zip

    def singleNumber(nums): single_num = 0 for num in nums: single_num ^= num return single_num ``` 在这个代码中,`single_num`初始值为0,然后遍历整个数组`nums`,对每个元素执行异或操作。由于每个元素...

    常见算法题答案及解析

    34. Single Number II:数组中除一个数字外,其他数字都出现了三次,找出只出现一次的数字。 六、其他 35. Spiral Matrix:按螺旋方式打印矩阵。 36. Integer to Roman:将整数转换为罗马数字。 37. Roman to ...

    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部分试题解析

    3. **Single Number**:在一个只包含两个重复数字的整数列表中找到唯一的单个数字。利用Python的位运算,可以实现快速查找单数。 4. **Same Tree**:判断两棵树是否结构相同且对应节点值相等。这涉及到深度优先搜索...

    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解题笔记1

    int singleNumber(vector&lt;int&gt;& nums) { int result = 0; for (int num : nums) { result ^= num; } return result; } ``` 2. **使用异或查找字符串中的新增字符**: 类似于找到数组中唯一数字的方法,...

    js-leetcode题解之有序数组的单个元素-题解.zip

    function singleNumber(nums) { let i = 0, j = nums.length - 1; while (i ) { if (nums[i] === nums[j]) { i++; j--; } else { return nums[i] !== nums[++i] ? nums[i] : nums[j]; } } return nums[i];...

Global site tag (gtag.js) - Google Analytics