《劍指Offer——名企面試官精講典型程式設計題》程式碼及其註釋
阿新 • • 發佈:2021-01-21
面試題3:陣列中重複的數字
class Solution { public: int findRepeatNumber(vector<int>& nums) { int length=nums.size();//將需要重複計算的數字使用暫存器儲存起來 if(nums.empty()||length<=0)return -1;//判斷vector是否為空 for(int i=0;i<nums.size();++i){//判斷陣列中是否所有數字都落在0~n-1範圍內 int tmp=nums[i];if(tmp<0||tmp>length-1) return false; } for(int i=0;i<length;++i){從頭到尾掃描陣列 while(nums[i]!=i){陣列下標和對應數相等則繼續 if(nums[i]==nums[nums[i]]){//陣列下標對應數和陣列下標對應數的下表對應數如果相等則說明該數重複 return nums[i]; }int tmp=nums[i];//否則交換兩數位置 nums[i]=nums[tmp]; nums[tmp]=tmp; } } return -1; } };
面試題4:二維陣列中的查詢
class Solution { public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if(matrix.empty())return false;//二維陣列為空則返回false int rowsize = matrix.size();//行數 int colsize = matrix[0].size();//列數 int row = rowsize - 1, col = 0; while (row >= 0 && col < colsize) { int tmp=matrix[row][col]; if (tmp == target){//值相等返回true return true; } if (tmp < target) {//值小於則列數增加 ++col; } else --row;//否則則行數減少 } return false; } };
面試題5:替換空格
class Solution { public: string replaceSpace(string s) { int spaceNum=0; int oldLength=s.length(); for(int i=0;i<oldLength;i++){ switch(s[i]){ case ' ':spaceNum+=2;//每遇到一個空格就增加兩個char長度 } } int newLength=oldLength+spaceNum; s.resize(newLength); while(oldLength>=0&&newLength>oldLength){ switch(s[oldLength]){ case ' ':{ s[newLength--]='0'; s[newLength--]='2'; s[newLength--]='%'; }break; default: s[newLength--]=s[oldLength]; } --oldLength; } return s; } };