首页 > 其他 > 详细

leetcode_Q35搜索插入位置解答与思考

时间:2020-05-16 23:39:38      阅读:80      评论:0      收藏:0      [点我收藏+]

  今天又完成了一道力扣的简单题目。现在记录下来思考过程并总结一下练习过程中出现的问题。最后参考一下给力网友的最优题解,思考怎样才能像网友们那么优秀。

/************************************************************/

  该命题是:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。

/***********************************************************/

  该题目给出几个示例,解决了这几个示例基本这道题就完成了。第一个是:输入[1,3,5,6], 5 输出2。可以看出直接循环当target == nums[i]的时候输出i就可以了;

  第二个示例是:输入[1,3,5,6], 2 输出2;可以看出如果nums[i]小于target,nums[i+1]大于target,这时target插入的位置就是i+1了;

  第三个示例是:输入[1,3,5,6], 7 输出4;即target比数组最大的数还要大,那就输出最后一个元素的位置+1就行;

  第四个示例是:输入[1,3,5,6], 0 输出0;即target比数组最小的数还要小,那就输出插在第一个数前面,就是0号位置。

int searchInsert(int* nums, int numsSize, int target)
{
    int i = 0;
    if(target < nums[0]) return 0;                           //如果比第一个数还小,就返回0
    else if(target>nums[numsSize-1]) return numsSize;        //如果比最后一个数还大,就返回最后一个数的位置+1,即numsSize
    else 
/*除了上述两种情况,就是target在数组的某个位置*/
    {for(i; i<numsSize; i++)
    {
        if(nums[i] == target) {return i; break;}
        else if(nums[i]<target && nums[i+1]>target) {return (i+1); break;}
        else continue;
    }
    }
    return 0;
}

  在写的过程中遇到的一个问题是最后循环外的return 0;第一次写的时候并没有加上,然后报错:control reaches end of non-void function [-Werror=return type],百度说是非void函数没有返回值导致的。但几个if语句都包含了return语句,函数不应该是return到调用的函数中就跳出了吗?怎么最后还会检查有没有return的?

  网友写了一个超级简洁的Java代码,原理也是暴力比较,但看起来简洁很多也很易懂,代码如下:

public int searchInsert(int[] nums, int target) {
    for(int i = 0; i < nums.length;i++){
        if(nums[i] >= target){
            return i;
        }
    }
    return nums.length;
}

  无可否认比我的好多了。

  官方给出的解法是二分查找,但是我居然看不懂,先填个坑,洗澡去了

leetcode_Q35搜索插入位置解答与思考

原文:https://www.cnblogs.com/teamcolt/p/12902616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!