leetcode刷题Day1

  1. 搜索插入位置
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    你可以假设数组中无重复元素。
    示例 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
    我的思路:
    用for循环对有序数组进行遍历,当遇到和他相等的数组元素时。直接返回数组元素的i;如果该有序数组中没有和他相等的,就找比他大的,通过比他大的数组元素的i找到他的地址。
    第一次写的代码
class Solution {
    public int searchInsert(int[] nums, int target) {
        for(int i=0;i<nums.length;i++)
        {
            if(nums[i]==target)
                return i;
            else if(nums[i]>=target)
                return i;
            else 
                return nums.length;    
        }
    }
    return 0;
}

该代码存在的问题:首先整个函数是int类型的,需要返回相应的数值,这里不知道该怎么写,其次两个if重合了没有合并,啰嗦了。
第二次

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

报错提示:error: missing return statement
问题:逻辑不对,这个代码的话当i=0时就返回了,后边的i=1,2,3…都没有判断。if-else 在一次循环中必定会执行一个分支,所以i=0的时候就会退出来。

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

总结:对于不为空类型的函数,函数体外一定要有return。因为函数中的函数或者for啥的不一定执行。
public int max(int[] nums)
{
for()
{
if …return…
else…return
}
}
这种的话如果for不执行整个函数就没有返回了

猜你喜欢

转载自blog.csdn.net/weixin_43443278/article/details/87855751