给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
1.首先需要确定执行次数 nums.length
2.因为有个目标值,所以用目标值与数组中的数据逐个进行比较,这里在运行期出现了三种情况:
第一种:当目标值小于数组下标为0的时候
第二种:当目标值大于数组中最后一个元素时
第三种:在数组中间搜索插入位置
第四种:当目标值等于数组中某个元素
代码实现:
class Solution {
public int searchInsert(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
if(target==nums[i]){ //这里对数组中存在相同元素进行判断
return i;
}else if(target<nums[i]){ //这里对滴三种情况进行判断
if(i==0) //这里对第一种情况进行判断
return 0;
return i;
}else if(i+1==nums.length){ //这里对第二种情况进行判断
return i+1;
}
}
return -1;
}
}
做这道题的时候,条件判断时出现了一个异常,把第二种情况进入进第三种情况的判断条件里面,那么程序执行结果会报错。
执行结果:
通过
显示详情
执行用时 :
1 ms
, 在所有 Java 提交中击败了
78.46%
的用户
内存消耗 :
39.1 MB
, 在所有 Java 提交中击败了
52.00%
的用户
执行用时为 0 ms 的范例:
class Solution {
public int searchInsert(int[] nums, int target) {
if(nums.length==0 || nums==null) {
return 0;
}
int min = 0;
int max = nums.length-1;
while(min<=max) {
int mid = (min+max)/2;
if(nums[mid]==target) {
return mid;
}else if(nums[mid]<target){
min = mid+1;
}else {
max = mid-1;
}
}
return min;
}
}
//这里典范同学用的是传说中的二分查找,我也不知道,没学二分查找。将数组一分为二,如果中间数等于目标数,那么返回中间数mid 如果中间数小于目标数,那么min+1,这相当于往后移了一位,如果中间值小于目标值那么最大值又减去一位,这相当于将数组一位一位的缩小,然后只用中间数与目标值进行比较。这样确实更加明了。给典范同学点赞。