美文网首页
算法-11.旋转数组的最小数字

算法-11.旋转数组的最小数字

作者: zzq_nene | 来源:发表于2020-08-11 14:19 被阅读0次

    方式一:直接遍历整个数组,出现后一个比当前位置的数字小的,即后一个就是最小值

        /**
         * 旋转数组的最小数字
         * 所谓旋转数组,即将一个数组最开始的若干个元素搬到数组的末尾
         * 比如数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转
         * 这就是将原数组的最开始两个元素搬到了数组的末尾
         * @param numbers
         * @return
         */
        public static int minArray1(int[] numbers) {
            if (numbers.length == 0) {
                return -1;
            }
            for(int i=0;i<numbers.length-1;i++){
                if(numbers[i]>numbers[i+1]) {
                    return numbers[i+1];
                }
            }
            return numbers[0];
        }
    

    方式二:采用二分查找法

        /**
         * 旋转数组的最小数字
         * 所谓旋转数组,即将一个数组最开始的若干个元素搬到数组的末尾
         * 比如数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转
         * 这就是将原数组的最开始两个元素搬到了数组的末尾
         * @param numbers
         * @return
         */
        public static int minArray(int[] numbers) {
            if (numbers.length == 0) {
                return 0;
            }
            int low = 0;
            int height = numbers.length - 1;
            while (low < height) {
                int mid = (height + low) / 2;
                if (numbers[mid] == numbers[low] && numbers[mid] == numbers[height]) {
                    for (int i = low;i<height;i++) {
                        // 遍历数组,第一次出现下一个比上一个小的情况,那么下一个就是最小值
                        if (numbers[i] > numbers[i + 1]) {
                            return numbers[i+1];
                        }
                    }
                    // 如果整个遍历都没有出现下一个比上一个小的情况,那么第一个就是最小值
                    return numbers[low];
                } else if (numbers[height] >= numbers[mid]) {
                    // 如果最高位置的值大于等于中间位置的,则说明最小值在小于等于mid的部分
                    height = mid;
                } else {
                    low = mid + 1;
                }
            }
            return numbers[low];
        }
    

    相关文章

      网友评论

          本文标题:算法-11.旋转数组的最小数字

          本文链接:https://www.haomeiwen.com/subject/tbqdrktx.html