力扣第35题 搜索插入位置 Plus One 算法 c++

题目

35. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 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;

    }

};

```

posted @   lenyan~  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示