题解 | #旋转排列之找出最矮的牛# java

旋转排列之找出最矮的牛

https://www.nowcoder.com/practice/ea91217beb83444aa324b86bfab4a952

import java.util.*;


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

使用的是Java语言。

该题考察的知识点是二分查找算法(Binary Search Algorithm)在旋转排序数组中找到最小值。

代码的文字解释如下:

  1. 在findMin()方法中,我们使用int类型的参数heights表示整型数组。
  2. 创建两个变量 left 和 right,分别表示数组的左边界和右边界。初始时,left为0,right为heights数组的长度减1。
  3. 使用循环进行二分查找,循环条件是 left < right。在每次循环中,计算中间位置 mid,将其设为左右边界的中间值。
  4. 判断以下三种情况:如果 heights[left] < heights[right] 且 heights[mid] < heights[left],说明最小值一定在左半边,将 left 更新为 mid。如果 heights[left] < heights[right] 且 heights[mid] > heights[right],说明最小值一定在右半边,将 right 更新为 mid。其他情况下,即 heights[left] >= heights[right],说明最小值在左右半边都可能存在,我们将 left 更新为 mid 并退出循环。
  5. 循环结束后,返回 heights[left] 作为最小值。
全部评论

相关推荐

吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务