Java 题解 | #牛群的位置排序#

牛群的位置排序

https://www.nowcoder.com/practice/87c81fa27b9a45c49ed56650dfa6f51b

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param labels int整型一维数组
     * @param target int整型
     * @return int整型
     */
    public int searchInsert (int[] labels, int target) {
        // write code here
        int left = 0;
        int right = labels.length - 1;
        if (labels[left] > target)
            return 0;
        if (labels[right] < target)
            return labels.length;
        int mid;
        while (left < right) {
            mid = (left + right) / 2;
            if (mid == left)
                return left + 1;
            if (labels[mid] == target)
                return mid;
            else if (labels[mid] < target) {
                left = mid;
            } else {
                right = mid;
            }
        }
        return left + 1;
    }
}

Java编程语言。

这个题目考察的是二分查找算法。给定一个已排序的整数数组 labels 和一个目标值 target,要求找出将 target 插入到数组中的正确位置,并返回插入位置的索引。如果 target 已经存在于数组中,则直接返回其索引;如果 target 在数组中不存在,则返回它应该插入的位置的索引。

代码的逻辑解释如下:

  1. 们定义左指针 left 初始化为数组的第一个元素的索引,右指针 right 初始化为数组最后一个元素的索引。
  2. 如果目标值比数组的第一个元素还要小,说明插入位置在数组的最前面,直接返回 0。
  3. 如果目标值比数组的最后一个元素还要大,说明插入位置在数组的最后面,直接返回数组长度。
  4. 使用二分查找的思想,在循环中查找插入位置。
  5. 当左指针小于右指针时,执行循环。
  6. 计算中间位置 mid,并比较中间位置的元素与目标值的大小。
  7. 如果中间位置的元素等于目标值,说明目标值已经存在于数组中,直接返回中间位置的索引。
  8. 如果中间位置的元素小于目标值,说明目标值应该插入到中间位置的右侧,更新左指针 
  9. 如果中间位置的元素大于目标值,说明目标值应该插入到中间位置的左侧,更新右指针 
  10. 当循环结束时,左指针和右指针相邻,说明已找到插入位置,返回左指针
  11. 如果循环结束时左指针和右指针不相邻,说明目标值在数组中不存在,返回左指针
全部评论

相关推荐

美团 后端开发 总包n(15%是股票)
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
整顿职场的柯基很威猛:这种不可怕,最可怕的是夹在一帮名校里的二本选手,人家才是最稳的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务