[劍指Offer]---03數組中重複的數字與04二維數組中的查找

03數組中重複的數字

思路:哈希表,掃描數組裏的每個數字,看哈希表裏是否有這個數字,沒有就將這個數字加進去,有的話,則該數字重複。時間複雜度是O(n)。

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {

         unordered_set<int>  record;
         for(auto iter=nums.begin();iter!=nums.end();++iter){

            int count=record.count(*iter);
            if(count==0)
            {
                record.insert(*iter);
            }
            else 
            {
               return *iter;
            }
         }

         return -1;

    }
};

 

04二維數組中的查找

思路:

    右上角遍歷,時間複雜度O(n+m)

    如果該數字等於要查找的數字,查找過程結束;

    如果該數字大於要查找的數字,剔除這個數字所在的列;

    如果該數字小於要查找的數字,剔除這個數字所在的行

 


class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {

        if(!matrix.empty())
        {
            // 行列個數
            int row = matrix.size();
            int col = matrix[0].size();
 
            // 右上角座標
            int x = 0;
            int y = col-1;
 
            while(x<row && y>=0)
            {
                
                if(matrix[x][y] == target)
                    return true;
 
                if(matrix[x][y] < target)
                    ++x;
                else
                    --y;
            }
        }
 
        return false;

    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章