力扣第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] <= 104
nums
为 无重复元素 的 升序 排列数组-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;
}
};
```
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)