zoukankan      html  css  js  c++  java
  • LeetCode 35 搜索插入位置

    链接:https://leetcode-cn.com/problems/search-insert-position

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

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

    示例 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



    这道题因为有两段性的关系,所以呢也可以用二分来做,两段性质分别是,左边的所有数都小于target,而右边的所有数都大于或等于target。那么我们定义一个check函数,看一下满足大于等于target的所有点中,第一个点的位置,那个位置就是我们所要求的解啦。check函数为 if (某个数 >= target)。那么我们要记住,当我们要算满足后面一段性质的解的时候,更新方式是 r = mid, l = mid + 1.

    可以看出来,满足后面一段的性质的表现是大于等于,满足前面一段的性质的表现是小于等于。并且解都要包含在前一段或后一段性质里面。

    c++代码如下:

     1 class Solution {
     2 public:
     3     int searchInsert(vector<int>& nums, int target) {
     4         if(nums.empty() || nums.back() < target) return nums.size();
     5         int l = 0, r = nums.size() - 1;
     6         while(l < r){
     7             int mid = l + r >> 1;
     8             if(nums[mid] >= target) r = mid;
     9             else l = mid + 1;
    10         }
    11         return r;
    12     }
    13 };

    在这道题中,开头还要错判一下,如果数组是空的,或者最后一个数都小于target,注意没有等于,等于的情况包含在下面的判断里面,那么直接返回数组的size就好。

  • 相关阅读:
    WAF攻防实战
    简单的Web日志分析脚本
    android multicast 多播(组播)问题
    easyhadoop:failed to open stream:Permission denied in /var/www/html/index.php
    Codeforces Round #215 (Div. 2) A. Sereja and Coat Rack
    删除workspace下的vss的scc文件
    由两代WIN8 Surface平板看微软心态
    C++ 需要返回值的函数却没有返回值的情况 单例模式
    调整系统的inode数量
    平衡树
  • 原文地址:https://www.cnblogs.com/hellosnow/p/11577215.html
Copyright © 2011-2022 走看看