LeetCode Search Insert Position查找插入位置

原创 2013年12月04日 08:48:00

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.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

 入门级题目。

思路有两个:

1 二分法查找到该数值,然后前移到比前面的数大的位置。如果没有找到就返回第一个比该数值大的数的下标。

2 可以二分法查找,不过稍微修改一下,例如查找1,3,5,6;那么两个坐标位置是0和3,然后计算中间位置m = (0+3)/2;但是这里要修改为(0+3+1)/2;这个是关键的地方。因为这样就截去了大于等于这个值的数,那么最后循环返回前面的指针(下标),就可以找到第一个大于等于该数值的下标了。

第一个思路很简单,这里只用了第二个思路,下面是二分法递归查找:

	int searchInsert(int A[], int n, int target) 
	{
		return lowerBound(A, 0, n-1,  target);
	}

	int lowerBound(int A[], int front, int back, int tar)
	{
		if (front > back) return front;
		int mid = front + ((back-front+1)>>1);
		if (A[mid] < tar)
			return lowerBound(A, mid+1, back, tar);
		return lowerBound(A, front, mid-1, tar);
	}

下面是非递归的:

class Solution {
public:
	int searchInsert(int A[], int n, int target) 
	{
		int first = 0;
		while (n>0)
		{
			//注意:移位操作的优先级,注意都加括号
			int mid = first + (n>>1);
			if (A[mid] < target)
			{
				first = mid+1;
				n -= (n>>1)+1;
			}
			else n >>= 1;
		}
		return first;
	}
};


 2014元旦更新:

二分截断法:

	int searchInsert3(int A[], int n, int target) 
	{
		int low = 0, up = n-1, mid = 0;
		while (low <= up)
		{
			mid = low +((up-low)>>1);
			if (A[mid] >= target) up = mid-1;
			else low = mid+1;
		}
		return low;
	}
不能再改进的程序了
//2014-1-26 update
	int searchInsert(int A[], int n, int target) 
	{
		int low = 0, up = n-1;
		while (low <= up)
		{
			int mid = low + ((up-low)>>1);
			if (A[mid] >= target) up = mid-1;
			else low = mid+1;
		}
		return low;
	}


 

 

 

版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者允许不得转载。

Search Insert Position -- LeetCode

原题链接: http://oj.leetcode.com/problems/search-insert-position/  这道题比较简单,就是二分查找。思路就是每次取中间,如果等于目标即返回,否则...
  • linhuanmars
  • linhuanmars
  • 2014年03月02日 07:40
  • 12480

【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
  • 2398

(Java)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...
  • u012848330
  • u012848330
  • 2016年08月07日 21:46
  • 241

LeetCode35——Search Insert Position

LeetCode35——Search Insert Position 题意: 给定一个target,和有序序列,如果target在序列中,则返回其索引,否则给出当插入target且不改变序列性质时...
  • zhangxiao93
  • zhangxiao93
  • 2015年10月15日 22:01
  • 602

LeetCode解题报告--Search Insert Position

题目: Given a sorted array and a target value, return the index if the target is found. If not, retu...
  • github_27609763
  • github_27609763
  • 2015年12月04日 16:58
  • 996

LeetCode 35 Search Insert Position(搜索并插入)

翻译给定一个已排序的数组和一个目标值,如果这个目标值能够在数组中找到则返回索引。如果不能,返回它应该被插入的位置的索引。你可以假设数组中没有重复项。以下是一些示例。原文Given a sorted a...
  • NoMasp
  • NoMasp
  • 2015年11月28日 21:16
  • 2305

LeetCode | Search Insert Position(查找插入位置)

Given a sorted array and a target value, return the index if the target is found. If not, return the...
  • a45872055555
  • a45872055555
  • 2014年07月09日 17:20
  • 511

LeetCode 35 Search Insert Position (C,C++,Java,Python)

Problem: Given a sorted array and a target value, return the index if the target is found. If n...
  • runningtortoises
  • runningtortoises
  • 2015年05月18日 20:33
  • 1088

Search Insert Position 插入位置

Given a sorted array and a target value, return the index if the target is found. If not, return the...
  • wang424313682
  • wang424313682
  • 2016年08月20日 09:36
  • 200

搜索插入位置:Search Insert Position

https://leetcode.com/problems/search-insert-position/注意以上实现方式有一个好处,就是当循环结束时,如果没有找到目标元素,那么left一定停在恰好比...
  • gao1440156051
  • gao1440156051
  • 2016年06月17日 12:14
  • 461
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode Search Insert Position查找插入位置
举报原因:
原因补充:

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