35. 搜索插入位置

原创 2018年04月16日 22:02:48

一、题意
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 1:

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

二、分析和解答

 public int searchInsert(int[] nums, int target) {
        int low = 0,high = nums.length - 1;
        while(low <= high){
            int mid = (low + high) / 2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] > target){
                high = mid - 1;
            }else
                low = mid + 1;
        }        
            return low;
    }

一个简单的二分查找!
1、如果while中的条件是low < high 的时候,只存在两种指针的形式:
(1)low和high指向同一位置;
(2)low在high指针的右边;
假设此时数组中不存在target的值:如果target和数组的两边缘有关系(即target在数组边界元素的前面或者后面),那么此时low和high指针都会指向边界元素,否则low 在high指针的右边。
以数组[1,3,5,6]为例:
(1)当target为0时,low和high指向数组的第一个元素,即下标0,(target < nums[0])返回low;
(2)当target为2时,low和high指向数组的第一个元素,即下标0,(target > nums[0])返回low + 1;
(3)当target为7时,low和high指向数组的最后一个元素,即下标3,(target > nums[3])返回low+1;
(4)当target为4时,low指针指向位置2,同时high指向位置1,(target < nums[2])返回low;

2、如果while中的条件是low <= high 的时候,只存在一种指针的形式:low在high指针的右边;
(1)如果是在左边界上,high肯定是-1(越界),low为位置0;如果在右边界上,low肯定是nums.length(越界),high为最后一个位置!
(2)和边界没关系,low在high的右边,但都不越界。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuchonghao/article/details/79967419

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...
  • nameix
  • nameix
  • 2016-09-28 21:50:16
  • 191

35. Search Insert Position 查找插入位置

Given a sorted array and a target value, return the index if the target is found. If not, return the...
  • shakalaka1
  • shakalaka1
  • 2017-11-28 18:17:37
  • 57

Leetcode #35. Search Insert Position 搜寻插入位置 解题报告

1 解题思想给定一个排好序的数组,和一个目标值,求找出能够插入的位置 数组的元素没有重复额,这道题直接二分查找,就能找到位置了,就是上一道题的弱化版,可以点进去看看 Leetcode #34. ...
  • MebiuW
  • MebiuW
  • 2016-04-06 10:43:23
  • 281

leetcode 35. Search Insert Position搜索插入位置(二分查找)

leetcode 35. Search Insert Position搜索插入位置(二分查找)
  • Shauna_Wu
  • Shauna_Wu
  • 2017-12-06 22:30:14
  • 72

leetcode 35. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5 输出: ...
  • u011750466
  • u011750466
  • 2018-04-19 20:17:09
  • 0

LeetCode 35. 搜索插入位置

题目描述: 搜索插入位置        给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。你可以假设在数组中无重复元素。案例 1:输入: [1,...
  • qq_33168253
  • qq_33168253
  • 2018-03-31 01:27:22
  • 7

【LeetCode-面试算法经典-Java实现】【035-Search Insert Position(搜索插入位置)】

【035-Search Insert Position(搜索插入位置)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a sorted array and a...
  • DERRANTCM
  • DERRANTCM
  • 2015-07-27 07:18:33
  • 2499

搜索插入位置:Search Insert Position

https://leetcode.com/problems/search-insert-position/注意以上实现方式有一个好处,就是当循环结束时,如果没有找到目标元素,那么left一定停在恰好比...
  • gao1440156051
  • gao1440156051
  • 2016-06-17 12:14:47
  • 520

LintCode 二分法查找, 搜索插入位置 和 二维矩阵

1. 二分查找给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。 样例 ...
  • shinanhualiu
  • shinanhualiu
  • 2015-10-05 17:02:56
  • 901

Lintcode 搜索插入位置

给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。 你可以假设在数组中无重复元素。 您在真实的面试中是否遇到过这个题?  ...
  • Hk_john
  • Hk_john
  • 2017-04-05 17:29:49
  • 227
收藏助手
不良信息举报
您举报文章:35. 搜索插入位置
举报原因:
原因补充:

(最多只允许输入30个字)