-
二維數組的查找
題目描述:在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
解題思路:暴力求解,遍歷整個數組,如果查詢到目標值就返回true。
代碼:class Solution { public: bool Find(int target, vector<vector<int> > array) { bool flag =false; for(int i=0;i<array.size();i++) { for(int j=0;j<array[0].size();j++) { if(target==array[i][j]) { flag=true; break; } if(flag==true) break; } } return flag; } };
-
空格替換
題目描述:請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。
解題思路:從前往後遍歷字符串,統計空格個數。從後往前插入數值(因爲字符串長度變長了)
代碼:class Solution { public: void replaceSpace(char *str,int length) { int count=0; for(int i=0;i<length;i++) { if(str[i]==' ') { count++; } } for(int j=length-1;j>=0;j--) { if(str[j]!=' ') str[j+2*count]=str[j]; else { count--; str[j+2*count]='%'; str[j+2*count+1]='2'; str[j+2*count+2]='0'; } } } };
-
最小的K個數
題目描述:輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
解題思路:先對數據進行排序,然後取前K的數值。
代碼:class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> res; int n=input.size(); if(input.empty()||k>input.size()) return res; sort(input.begin(),input.end()); for(int i=0;i<k;i++) { res.push_back(input[i]); } return res; } };
-
跳臺階
題目描述:一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
解題思路:斐波那契數列
代碼:class Solution { public: int jumpFloor(int number) { if(number<=0) return 0; if(number==1)return 1; if(number==2)return 2; return jumpFloor(number-1)+jumpFloor(number-2); } };
-
從尾到頭打印鏈表
題目描述:輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。
解題思路:利用遞歸
代碼:class Solution { public: vector<int> value; vector<int> printListFromTailToHead(ListNode* head) { ListNode *p=NULL; p=head; if(p!=NULL){ if(p->next!=NULL){ printListFromTailToHead(p->next); } value.push_back(p->val); } return value; } };
-
二進制中1的個數
問題描述:輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。
代碼:class Solution { public: int NumberOf1(int n) { int count=0; while(n!=0) { n=n&(n-1); count++; } return count; } };
-
調整數組順序是奇數位於偶數前面
題目描述:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
代碼:class Solution { public: void reOrderArray(vector<int> &array) { vector<int> result; int n=array.size(); for (int i=0;i<n;i++) { if(array[i]%2==1) { result.push_back(array[i]); } } for (int i=0;i<n;i++) { if(array[i]%2==0) { result.push_back(array[i]); } } array= result; } };
-
整數1出現的次數
題目描述:求出113的整數中1出現的次數,並算出1001300的整數中1出現的次數?爲此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。ACMer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。
代碼:class Solution { public: int NumberOf1Between1AndN_Solution(int n) { int count=0; if(n<=0) return 0; for(int i=0;i<=n;i++) { int tmp=i; while(tmp) { if(tmp%10==1) { ++count; } tmp/=10; } } return count; } };
劍指offer編程題持續跟新(c++)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.