题目描述:
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; } };