美文网首页TDDC#
LeetCode. 136 Single Number

LeetCode. 136 Single Number

作者: 就是91 | 来源:发表于2017-03-13 14:22 被阅读18次

    LeetCode 136 題:Single Number

    題目描述

    題目解釋:給一個整數陣列 nums, 裡面只有一個數字出現一次,其他都是出現兩次,找出那個孤單的數字。

    Step 1: 新增測試用例,只有一個整數時,回傳該整數。nums_is_5_singleNumber_should_be_5

    測試代碼:

    測試代碼

    生產代碼:

    尚未實作的生產代碼

    Step 2: Hard-code return nums[0] 以通過測試用例

    生產代碼:先直接回傳 nums[0] 以通過測試用例

    hard-code 通過測試用例

    重構測試代碼:[Extract Method] AssertSingleNumber()

    重構測試:擷取驗證方法

    Step 3: 新增測試用例,nums_is_454_singleNumber_should_be_5

    測試代碼:整數陣列長度增加到 3。

    長度為 3 的測試用例

    生產代碼:使用 Dictionary 來存放每個數字出現的次數為奇數還是偶數。

    用 Dictionary 紀錄數字出現次數為奇數還是偶數

    Step 4: 新增通過的測試用例

    測試用例:

            [TestMethod]
            public void nums_is_454_singleNumber_should_be_5()
            {
                var nums = new int[] { 4, 5, 4 };
                AssertSingleNumber(nums, 5);
            }
    
            [TestMethod]
            public void nums_4_2_4_7_2_singileNumber_should_be_7()
            {
                var nums = new int[] { 4, 2, 4, 7, 2 };
                AssertSingleNumber(nums, 7);
            }
    

    題目有說明,不希望用到額外的記憶體來處理,因此 Dictionary 是不符合題目規定的。

    Step 5: 重構演算法,改用 XOR 處理,找出孤單的數字

    XOR 的特色是,某個數字 XOR 偶數次,會得到全都是 0 的結果。最後剩下的,就是孤單的數字。

    生產代碼:

        public class Solution
        {
            public int SingleNumber(int[] nums)
            {
                int result = 0;
                for (int i = 0; i < nums.Length; i++)
                {
                    result = result ^ nums[i];
                }
    
                return result;
            }
        }
    

    通過 LeetCode 上所有測試用例

    通過 LeetCode 所有 test cases

    結論

    就是考你 XOR 的特性,沒啥太大意義。但練手感跟思路還是不錯的。

    GitHub commit history: LeetCode_136_Single_Number

    相关文章

      网友评论

      • ukao:最后的xor赞一个,为什么会想到使用这个方法呢?
        就是91:哈,對啊。就是想找出「數字成對」的 pattern 究竟是什麼。LeetCode 上考驗效能,通常效能都吃數學。先寫出程序員邏輯性的解答後,再思考效能如果要優化,數學上有沒什麼能幫上忙。
        ukao:@ukao 从整体上去看就懂了哈,不要纠结每次循环

      本文标题:LeetCode. 136 Single Number

      本文链接:https://www.haomeiwen.com/subject/idgfnttx.html