- 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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不执行整个函数就没有返回了