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

本文详细解析了在排序数组中搜索目标值并确定其插入位置的算法,包括四种特殊情况的处理,以及使用二分查找法优化算法效率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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,这相当于往后移了一位,如果中间值小于目标值那么最大值又减去一位,这相当于将数组一位一位的缩小,然后只用中间数与目标值进行比较。这样确实更加明了。给典范同学点赞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值