程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [LeetCode從零單刷]Find the Duplicate Number

[LeetCode從零單刷]Find the Duplicate Number

編輯:C++入門知識

[LeetCode從零單刷]Find the Duplicate Number


題目:

Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.

Note:

  1. You must not modify the array (assume the array is read only).
  2. You must use only constant, O(1) extra space.
  3. Your runtime complexity should be less than O(n2).
  4. There is only one duplicate number in the array, but it could be repeated more than once.

     

    解答:

    其實我第一個想法就是排序,如果前後相同就說明元素重復了。滿足上面的所有要求,然後AC了……

     

    class Solution {
    public:
        int findDuplicate(vector& nums) {
            sort(nums.begin(), nums.end());
            int ans = nums[0];
            for(int i = 0; i< nums.size() - 1; i++)
            {
                if(nums[i] == nums[i+1])    ans = nums[i];
            }
            return ans;
        }
    };
    其實這道題還有很多奇妙的解法:

     

     

    二分法:遍歷一遍數組,大於中間數的個數如果多於 (n / 2) 則說明多出來的數在大於中間數的那部分中,同理也可能在小於中間數的那部分中。這樣每次只關注某一半的數據,搜索一半而已;映射找環法:使用快慢兩個指針遍歷,非常巧妙 以上兩種解法具體見:傳送門

     

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved