1. 程式人生 > 其它 >劍指offer-AcWing 13. 找出陣列中重複的數字

劍指offer-AcWing 13. 找出陣列中重複的數字

https://www.acwing.com/problem/content/description/14/


給定一個長度為 n 的整數陣列 nums,陣列中所有的數字都在 0∼n−1 的範圍內。
陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。
請找出陣列中任意一個重複的數字。
注意:如果某些數字不在 0∼n−1 的範圍內,或陣列中不包含重複數字,則返回 -1;

資料範圍
0≤n≤1000
樣例
給定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。
返回 2 或 3。


點選檢視程式碼
class Solution {
public:
    //前面有重複的不能返回nums[i],若後面有不符合要求的返回-1!!!
    // 
    int duplicateInArray(vector<int>& nums) {
        if(nums.size() == 0) return -1;
        int st[1011];
        memset(st,0,sizeof st);
        bool isok = true;
        int ans = -1; //如果所有數字都在0~n-1,不包含重複數字,也要返回-1
        for(int i = 0; i < nums.size(); i++){
            if(nums[i] < 0 || nums[i] > nums.size()-1){
                isok = false;
            }
            if(st[nums[i]] != 0) ans = nums[i];
            st[nums[i]] = 1;
        }
        if(isok && isok != -1) return ans;
        return -1;
    }
};