您的位置:首页 > 编程语言 > Java开发

[LeetCode][Java] Search Insert Position

2015-05-21 14:02 323 查看

题目:

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

题意:

给定一个有序数组和一个目标值,在数组中查找这个目标值,如果找到,返回这个目标值在数组中的位置;如果没有找到,返回在数组可以插入这个值的位置。

算法分析:

二分搜索,但是测试中好多特殊的例子,还好最后通过呃了,代码稍乱,但是思想还是很简单的。

代码如下:

public class Solution
{
public int searchInsert(int[] nums, int target)
{
int startindex;
int endindex;
if (nums.length==0) return 0;
if (nums.length==1 )
{
if(target>nums[0]) return 1;
else return 0;
}
startindex=0;
endindex=nums.length-1;
return search(nums, target, startindex,endindex);
}
private static int search(int[] nums, int target, int startindex, int endindex)
{
int finalindex;
int midindex;
if(target>nums[startindex]&&target<nums[endindex]&&endindex-startindex==1)
return endindex;
if(startindex==endindex)
{
if(target<nums[startindex]) return startindex;
else if(target>nums[endindex])
return endindex+1;
}
if(endindex-startindex==1)
{
if (target>nums[startindex]) midindex=endindex;
else midindex=startindex;
}
else
midindex=(startindex+endindex)/2;

if (target>nums[midindex])
{
startindex=midindex;
if(startindex<0) startindex=0;
else if(startindex>=nums.length) startindex=nums.length-1;
finalindex=search(nums, target,startindex,endindex);
}
else if(target<nums[midindex])
{
endindex=midindex;
if(endindex<0) endindex=0;
else if(endindex>=nums.length) endindex=nums.length-1;
finalindex=search(nums, target,startindex,endindex);
}

else
return midindex;
return finalindex;
}
}


别人家的代码,好简单


public class Solution {
public int searchInsert(int[] A, int target) {
int i = 0;
int j = A.length - 1;

while (i <= j) {
int mid = (int)((i + j)/2);
if (A[mid] == target) {
return mid;
} else if (A[mid] > target) {
j = mid - 1;
} else {
i = mid + 1;
}
}
return i;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: