1. 程式人生 > 其它 >劍指Offer-第5天 查詢演算法(中等)

劍指Offer-第5天 查詢演算法(中等)

第一題

題目連結:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/

個人題解:因為矩陣元素的特殊性,因此可以一行一行或者一列一列查詢

程式碼:

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        if(matrix.size()==0 || matrix[0].size()==0) return false;

        int row=0,col=matrix[0].size()-1;

        while(row<matrix.size() && col>=0){
            int num=matrix[row][col];
            if(num==target) return true;
            else if(num>target) col--;
            else row++;
        }
        return false;
    }
};

執行結果:

第二題

題目連結:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/

個人題解:二分查詢

程式碼:

class Solution {
public:
    int minArray(vector<int>& numbers) {
        int le=0,ri=numbers.size()-1;
        while(le<ri)
        {
            int mid=le+(ri-le)/2;
            if (numbers[mid]<numbers[ri]) ri=mid;
            else if(numbers[mid]>numbers[ri]) le=mid+1;
            else ri--;
        }
        return numbers[le];
    }
};

執行截圖:

第三題

題目連結:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/

個人題解:雜湊表

程式碼

class Solution {
public:
    char firstUniqChar(string s) {
        unordered_map<int,int> hash;
        for(auto ch:s) hash[ch]++;
        for(int i=0;i<s.length();i++){
            if(hash[s[i]]==1) return s[i];
        }
        return ' ';
    }
};

執行截圖: