[검 제공] 11 회전 배열의 최소 수

하나, 문제

1. 배열의 첫 번째 요소를 배열의 끝으로 이동합니다.이를 배열의 회전이라고합니다. 오름차순 배열의 회전을 입력하고 회전 된 배열의 가장 작은 요소를 출력합니다. 예를 들어 배열 [3,4,5,1,2]는 [1,2,3,4,5]의 회전이고 배열의 최소값은 1입니다.

2. 예

입력 : [3,4,5,1,2]
출력 : 1

입력 : [2,2,2,0,1]
출력 : 0

둘째, 해결책

1. 폭력 법

첨자가 0 인 요소에서 순회 시작

각 비교에서 현재 요소가 다음 인접 요소보다 크면 해당하는 다음 요소가 최소값입니다.

쿼리의 마지막 요소에 2가 없으면 아래 첨자 요소가 가장 작은 요소입니다.

2. 이분법

순서대로 요소 저장 (필수)

package com.haoxiansheng.demo01.SwordfingerOffer;

import lombok.extern.slf4j.Slf4j;

import java.util.Vector;

/**
 * @author flame
 * @data 2020/10/24
 */
@Slf4j
public class MinArrayDemo {
    
    
    public static void main(String[] args) {
    
    
        int [] arr = {
    
    2, 3, 4, 5, 0, 1};
        log.info("minArray=>{}", minArray(arr));
    }

    // 暴力匹配  + 二分查找
    // 时间复杂度为 O(n)
    // 空间复杂度:O(1)
    public static int minArray(int [] numbers) {
    
    
        int left = 0;
        int right = numbers.length -1;

        if (right == 0) {
    
    
            return numbers[0];
        }

        while (left < right) {
    
    
            int mid = left + (right - left) / 2;
            if (numbers[mid] > numbers[right]) {
    
    
                left = mid + 1;
            } else if(numbers[mid] < numbers[right]) {
    
    
                right = mid;
            } else if (numbers[mid] == numbers[right]) {
    
    
                right --; // 暴力缩减范围
            }
        }
        return numbers[left];
    }
}

추천

출처blog.csdn.net/qq_40996741/article/details/109268287