天天看点

数组练习题之 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 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,这相当于往后移了一位,如果中间值小于目标值那么最大值又减去一位,这相当于将数组一位一位的缩小,然后只用中间数与目标值进行比较。这样确实更加明了。给典范同学点赞。