【LeetCode35】【Search Insert Position】二分法查找

1. 题目原文

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

2. 题目翻译

又是一个处理排好序的数组问题。写的方法应该返回target在数组中的位置,如果target不在数组中,返回target应该插入数组的哪个位置。

3. 题目分析

这道题用平常的解法解答十分简单,只要在循环数组每一个数的时候,返回第一次大于或者等于target的位置索引。

但是写这篇博文的主要原因并不是这道题,而是我意外发现在Submission Details中点击Accepted Solutions Runtime Distribution表格中的柱形时,是可以看到每一个时间维度里的示例代码。
我点击排名最靠前的柱形,看了“大神”的代码,获得了一个解题的新的方法–二分法查找,之前学习数据结构的时候学过,但是现在似乎忘得精光了,赶紧膜拜学习,自己写了实现代码。

4. java代码

(1)实现代码1(普通思路):

public int searchInsert1(int[] nums, int target) {
        int i = 0;
        while(i<nums.length){
            if(nums[i]>=target){break;}
            i++;
        }
        return i;
    }

(2)实现代码2(二分法查找):

public int searchInsert2(int[] nums, int target) {
        if(nums.length==0){return 0;}
        int begin = 0,end = nums.length-1;
        while(begin<=end){
            int middle = (begin + end)/2;
            if(nums[middle]==target){return middle;}
            else if(nums[middle]>target){
                end = middle - 1;
            }else{
                begin = middle + 1;
            }
        }
        return begin;
    }

5. 总结

这道题目的数据量比较小,所以二分法查找的效率并没有十分体现出来。但在数组长度比较长的的情况下,这种方法应该是一个更好的解题思路。
今后遇到数据量比较大,且是排好序数据的情况下,可以多尝试该方法,达到熟练应用的目的,与大家共勉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值