劍指Offer-第5天 查詢演算法(中等)
阿新 • • 發佈:2022-05-07
第一題
題目連結: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 ' '; } };
執行截圖: