力扣第35题 搜索插入位置 Plus One 算法 c++
题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7 输出: 4
提示:
1 <= nums.length <= 104-104 <= nums[i] <= 104nums为 无重复元素 的 升序 排列数组-104 <= target <= 104
# 思路
> 从数组的最后一个元素开始遍历,逐个将元素进行加一操作。
>如果当前元素等于 10,则将其置为 0,表示进位。
>如果当前元素不等于 10,说明没有进位,直接返回数组。
>循环结束后,如果仍然没有返回,说明最高位有进位,需要在数组的开头插入一个元素 1,表示溢出。
# 复杂度
- 时间复杂度:
> O(n) 其中 N 是输入数组 digits 的长度。需要遍历整个数组。
- 空间复杂度:
> O(1) 除了返回的结果外,只使用了常数额外空间。
c++代码注释
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
// 从数组的最后一个元素开始遍历
for (int i = digits.size() - 1; i >= 0; i--) {
// 将当前元素加一
digits[i]++;
// 如果当前元素等于 10,则进位,将当前元素置为 0
if (digits[i] == 10)
digits[i] = 0;
// 如果当前元素不等于 10,说明没有进位,直接返回数组
else return digits;
}
// 循环结束后仍然没有返回,说明最高位有进位,需要在数组的开头插入一个元素 1
digits.insert(digits.begin(), 1);
return digits;
}
};
# Code
```C++ []
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
// 从数组的最后一个元素开始遍历
for (int i = digits.size() - 1; i >= 0; i--) {
// 将当前元素加一
digits[i]++;
// 如果当前元素等于 10,则进位,将当前元素置为 0
if (digits[i] == 10)
digits[i] = 0;
// 如果当前元素不等于 10,说明没有进位,直接返回数组
else return digits;
}
// 循环结束后仍然没有返回,说明最高位有进位,需要在数组的开头插入一个元素 1
digits.insert(digits.begin(), 1);
return digits;
}
};
```
浙公网安备 33010602011771号