【算法题】求旋转数组的中位数

public class findNumInRotateArr {

    public static double minNumberInRotateArray(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int left = 0;
        int right = nums.length - 1;
        while (left < right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] < nums[right]) {
                right = mid;
            } else if (nums[mid] > nums[right]) {
                left = mid + 1;
            } else {
                right--;
            }
        }
        int size = nums.length;
        if (size % 2 == 1) {
            return nums[(left + size / 2) % size];
        } else {
            return (double) (nums[(left + size / 2) % size] + nums[(left + (size - 1) / 2) % size]) / 2;
        }
    }

    public static void main(String[] args) {
        int[] arr = {6, 7, 8, 1, 2, 3, 4, 5};
        System.out.println(minNumberInRotateArray(arr));
    }
}


全部评论
lc153先确定最小值的位置,然后再求中位数感觉应该可行
1 回复 分享
发布于 2020-01-02 11:48
二分思路,一个月前看答案做的,细节我自己也没抠太清楚 ```python class Solution:     def findMin(self, nums: List[int]) -> int:         if not nums: return None         l,r = 0,len(nums)-1         while l + 1 < r:             mid = (l + r) >> 1             # 第一种情况 左<中<右,说明区间内已经不含旋转点             if nums[l] < nums[mid] < nums[r]:                 r = mid             else:                 # 否则,区间内含有旋转点,需比较mid和left的关系                 if nums[mid] < nums[l]:                     r = mid                 else:                     l = mid         return min(nums[l],nums[r]) ```
点赞 回复 分享
发布于 2020-01-02 14:52

相关推荐

评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务