LeetCode35_Search Insert Position

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 4:

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

题目不难,但需要考虑:

1.输入值小于最小值,输出0

2.输入值大于最大值,输出numSize

3.该值有多个,看题目来说不存在这个问题,输出第一个值就可以

4.该值介于两值之间,这时必须是严格的大于前者小于后者,不能是包含等于的情况

5.可以用nums[i+1]表示后面的值

6.注意在循环中用break;及时跳出

错误版本代码1:

int searchInsert(int* nums, int numsSize, int target) {
    int index,i;
    for(i=0;i<numsSize;i++){
        if(nums[i]<=target&&nums[i+1]>=target)
        {index=i;break;}//此处两者输出值不要,大于前者小于后者的应该输出后者的值,也就是i+1
    }//其余情况均没有考虑
    return index;

}

错误版本代码2:

int searchInsert(int* nums, int numsSize, int target) {
    int index,i;
    for(i=0;i<numsSize-1;i++){
        if(nums[i]==target||nums[i]<target&&nums[i+1]>target){index=i;break;}
    }
    if(i==numsSize-1){index=numsSize;}//以跳出后的i值判断,没有考虑到等于最后一个值的情况,也没有考虑小于第一个值的情况,以后这种情况都用if提前判断,else主体函数,不要想等到最后再判断了,这个很容易写错
    return index;

}

错误版本代码3:

int searchInsert(int* nums, int numsSize, int target) {
    int index,i;
    if(nums[0]>target){index=0;}
    else{
    for(i=0;i<numsSize-1;i++){            
        if(nums[i]==target){index=i;break;}
        if(nums[i]<target&&nums[i+1]>target){index=i+1;break;}
    }
    if(i==numsSize-1){index=numsSize;}//以跳出后的i值判断,没有考虑到等于最后一个值的情况
    }
    return index;

}

最终版本代码:

int searchInsert(int* nums, int numsSize, int target) {
    int index,i;
    if(target<nums[0]){index=0;}//排除特殊情况1
    else if(nums[numsSize-1]<target){index=numsSize;}//排除特殊情况2
            else{
                for(i=0;i<numsSize;i++){
                    if(nums[i]==target){index=i;break;}
                    if(nums[i]<target&&nums[i+1]>target){index=i+1;break;}
                }//主要情况分两种
    }
    return index;
}

java版本如下:

1.分为三种情况讨论,当小于最小,当大于最大,当居中时,居中是arget>nums[i]&&target<=nums[i+1]

2.方法的括号里没有返回值会报错,所以把大于最大的情况放在了最后的排除法return里面,要注意前面的包含性。

class Solution {
    public int searchInsert(int[] nums, int target) {
        int len=nums.length;
        if(target<=nums[0]||len==0){return 0;}
        //if(target>nums[len-1]){return len;}
        for(int i=0;i<len-1;++i){
            if(target>nums[i]&&target<=nums[i+1]){
                return i+1;
            }
        } 
        return len;
    }
}

猜你喜欢

转载自blog.csdn.net/lilililililydia/article/details/80988956
今日推荐