[LeetCode-35]-Search Insert Position(搜索整数所在的位置)

题目相关

【题目解读】
从有序整数列表中搜索给定整数,如果在其中返回下标位置,如果不在,返回应该在的位置。

【题目】原题链接
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Example 1:
Input: [1,3,5,6], 5
Output: 2

Example 2:
Input: [1,3,5,6], 2
Output: 1

Example 3:
Input: [1,3,5,6], 7
Output: 4

Example 4:
Input: [1,3,5,6], 0
Output: 0

【难度】Easy

Solution

该题是一个典型的查找问题,可以采用从前到后顺序遍历的方法,也可以采用经典的二分查找算,下面是使用这两种方法的对应代码。

1. 顺序遍历

C++程序中数据存在在vector中,所以可以直接使用下标进行访问。

int searchInsert(vector<int>& nums, int target) {
   int i = 0;
   while(i < nums.size())
   {
       if (target <= nums[i]) break;
       i ++;
   }
   return i;
}

最开始写出该方法后,不相信这么简单,自己想了好几个测试用例,没问题才提交的,通过了,不过效率不高,运行结果如下。

123

2. 算法改进 – 二分查找

vector可以使用下标操作,同时是有序的,所以可以方便的使用二分查找算法进行查找。

二分查找算法太经典和常用,应熟稔于心。

int searchInsert(vector<int>& nums, int target)
{
      int low = 0;
      int high = nums.size() - 1;

      while(low <= high) //这里的判断条件需要注意
      { 
          int mid = (low + high)/2;

          if(target < nums[mid]) high = mid -1;
          else if(target > nums[mid]) low = mid + 1;
          else return mid;
      }
      return low;
}

上面的算法中,几个判断的地方需要注意下,while中的应该是 low <= high, if判断中举出一个例子就能清楚的看到是咋回事请。

该算法的提交结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值