[LeetCode][Java] Search Insert Position

来源:互联网 发布:数控铣床编程创意图案 编辑:程序博客网 时间:2024/05/17 03:13

题目:

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;    }}


0 0
原创粉丝点击