美文网首页
LeetCode — Easy [35] 搜索插入位置

LeetCode — Easy [35] 搜索插入位置

作者: 纳萨立克 | 来源:发表于2019-03-20 17:47 被阅读0次

    LeetCode — Easy [35] 搜索插入位置

    题目

     给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    你可以假设数组中无重复元素。
    示例 1:
    输入: [1,3,5,6], 5
    输出: 2
    
    示例 2:
    输入: [1,3,5,6], 2
    输出: 1
    
    示例 3:
    输入: [1,3,5,6], 7
    输出: 4
    
    示例 4: 
    输入: [1,3,5,6], 0
    输出: 0
    

    我的解法

    int searchInsert(int* nums, int numsSize, int target) {
    
        int i = 1;
        int index = 0;
        if(numsSize == 1){
            if(target <= nums[0]){
                index = 0;
            }else{
                index = 1;
            }
        }
        for(i = 1; i < numsSize; i++)
        {
            if(i == 1 && target <= nums[i-1]){
                index = 0;
                break;
            }
    
            if(i == numsSize - 1  && target >= nums[i]){
                if(target > nums[i]){
                    index = i+1;
                }else{
                    index = i;
                }
                break;
            }
            
            if(target > nums[i-1] && target <= nums[i]){
                index = i;
                 break;
            }
        }
        return index;
    }
    
    我的思路
    1. 当nums数量为1的时候 比较大小
    2. 当nuns数量大于2的时候 循环比较

    算法优化

    算法一

    遍历数组,如果当前值比目标值大,返回当前位置. 然后循环结束说明目标的值比所有值都要大, 直接返回数组的长度

    int searchInsert(int* nums, int numsSize, int target) {
    
        for(int i = 0; i < numsSize; i++)
        {
            if(nums[i] >= target){
                return i;
            }
        }
        return numsSize;
    }
    
    算法二 (二分搜索法)
    int searchInsert(int* nums, int numsSize, int target) {
        if (target > nums[numsSize]) {
            return numsSize;
        }
        int left = 0;
        int right = numsSize -1;
        while(left < right){
            int mid = left + (right - left) /2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] < target) 
            {
                left = mid + 1;
            }else {
                right = mid;
            }
        }
        return right;
    }
    

    相关文章

      网友评论

          本文标题:LeetCode — Easy [35] 搜索插入位置

          本文链接:https://www.haomeiwen.com/subject/hiptvqtx.html