Leetcode35. Search Insert Position

题目描述:

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

题目含义:

要求我们在一个一维的有序数组中,查找指定元素,如果找到了则返回目标元素在数组中的位置,如果没有找到目标元素,则返回按照有序的方式插入数组的位置。

解题思路:

典型的二分法,不过我们有两种方法解决这个问题,寻找第一个大于等于目标元素的元素,或者在数组中寻找最后一个小于等于目标元素的元素。

具体实现:

public class Solution {
        public int searchInsert(int[] A, int target) {
            // write your code here
            if (A == null || A.length == 0) {
                return 0;
            }
            int start = 0;
            int end = A.length - 1;
            while (start + 1 < end) {
                int mid = start + (end - start) / 2;
                if (A[mid] == target) {
                    return mid;
                } else if (A[mid] < target) {
                    start = mid;
                } else {
                    end = mid;
                }
            }
            if (A[start] >= target) {
                return start;
            } else if (A[end] >= target) {
                return end;
            } else {
                return end + 1;
            }
        }
    }   

需要我们考虑的是如果,我们没有假定,在这个数组中的元素不是唯一存在的时候我们应该怎么办。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值