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/,未经本作者允许不得转载。 举报

相关文章推荐

LeetCode Search Insert Position查找插入位置

入门级题目。 思路有两个: 1 二分法查找到该数值,然后前移到比前面的数大的位置。如果没有找到就返回第一个比该数值大的数的下标。 2 可以二分法查找,不过稍微修改一下,例如查找1,3,5,6;那...

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

Given a sorted array and a target value, return the index if the target is found. If not, return the...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Leetcode刷题记—— 35. Search Insert Position(查找插入位置)

一、题目叙述: Given a sorted array and a target value, return t...

Search insert position @leetcode

leetcode原题地址:https://oj.leetcode.com/problems/search-insert-position/        原题内容如下: Given a sor...

Search Insert Position--LeetCode

题目: Given a sorted array and a target value, return the index if the target is found. If not, retu...

[LeetCode]Search Insert Position

Search Insert Position

Leetcode- Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the...

leetcode: Search Insert Position

Search Insert Position

LeetCode | Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the...

《leetCode》:Search Insert Position

题目Given a sorted array and a target value, return the index if the target is found. If not, return t...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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