題目描述:
Given a number represented as an array of digits, plus one to the number.
給你一個用數組表示的數,求加一之後的結果,結果還是用數組表示
解題思路:
- 當前位不等於9,只用把數字+1
- 當前位等於9,看下一位,直到找到不爲9的數字,將當前位+1,再把後面所有數字設爲0
如果最高位也從9變成0,就return一個大小爲digits.length+1的array,array[0]=1
代碼實現:class Solution { public: vector<int> plusOne(vector<int> &digits) { int size=digits.size(); int i=0; for(i=size-1;i>=0;--i) { if(digits[i]!=9) { digits[i]++; return digits; } else{ digits[i]=0; } } //各位全是0 if(i<0) { digits.insert(digits.begin(),1); } return digits; } };
2、給定一個排序的整數數組,找到給定目標值的起始位置和結束位置。
題目要求:
您的算法的運行時複雜度必須是O(log n)的順序。
如果在數組中找不到目標,返回[-1,-1 ]。
解題思路:
- 定義前後兩個指針
- 採用二分查找的方法查找目標元素
- 並進行比較,若相等,將下標保存
不相等,繼續查找,若還未找到就將-1保存入vector中
代碼實現:class Solution { public: vector<int> searchRange(int A[], int n, int target) { int left=0; int right=n-1; vector<int> res; res.push_back(-1); res.push_back(-1); while(left<=right) { //找到了就將下標存起來 if(A[left]==target&&A[right]==target) { res[0]=left; res[1]=right; break; } else {//二分查找遍歷數組 int mid=left+((right-left)>>1); if(A[mid]<target) left=mid+1; else if(A[mid]>target) right=mid-1; else{ if(A[right]==target) ++left; else --right; } } } return res; } };