• LeetCode(35):搜索插入位置


    Easy!

    题目描述:

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

    你可以假设数组中无重复元素。

    示例 1:

    输入: [1,3,5,6], 5
    输出: 2
    

    示例 2:

    输入: [1,3,5,6], 2
    输出: 1
    

    示例 3:

    输入: [1,3,5,6], 7
    输出: 4
    

    示例 4:

    输入: [1,3,5,6], 0
    输出: 0

    解题思路:

    该题目只需要遍历一遍原数组,若当前数字大于或等于目标值,则返回当前坐标,如果遍历结束了,说明目标值比数组中任何一个数都要大,则返回数组长度n即可。

    C++解法一:

    1 class Solution {
    2 public:
    3     int searchInsert(vector<int>& nums, int target) {
    4         for (int i = 0; i < nums.size(); ++i) {
    5             if (nums[i] >= target) return i;
    6         }
    7         return nums.size();
    8     }
    9 };

    当然,我们还可以用二分搜索法来优化我们的时间复杂度,而且个人认为这种方法应该是面试官们想要考察的算法吧。

    C++解法二:

     1 class Solution {
     2 public:
     3     int searchInsert(vector<int>& nums, int target) {
     4         if (nums.back() < target) return nums.size();
     5         int left = 0, right = nums.size() - 1;
     6         while (left < right) {
     7             int mid = left + (right - left) / 2;
     8             if (nums[mid] == target) return mid;
     9             else if (nums[mid] < target) left = mid + 1;
    10             else right = mid;
    11         }
    12         return right;
    13     }
    14 };
  • 相关阅读:
    DoTween插件的使用
    Unity3D协程的简单使用
    排序和双指针,减小时间复杂度
    Unity3D自定义菜单组件
    滑动窗口思路分析
    Unity3D中的序列化特性和DLL特性
    求数组的交集,以及贪心算法的使用
    随笔开始啦
    实例26 循环体的过滤器
    实例25 终止循环体
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9138166.html
Copyright © 2020-2023  润新知