剣はオファーを指します-11。配列の最小数を回転させます

トピックは次のとおりです

配列の最初から最後までいくつかの要素を移動することを、配列の回転と呼びます。昇順で並べ替えられた配列の回転を入力し、回転された配列の最小要素を出力します。たとえば、配列[3,4,5,1,2]は[1,2,3,4,5]の回転であり、配列の最小値は1です。

例1:
入力:[3,4,5,1,2]
出力:1

例2:
入力:[2,2,2,0,1]
出力:0


独自のアルゴリズムとコード

(コードは正しく実行および送信できます)
具体的なアルゴリズムは次のとおりです。

  • 最小値を初期化しますmin=-1;
  • 配列を介して、満たされるとnumbers[i] > numbers[i+1]、にnumbers[i+1]割り当てられmin、ループから外れます。
  • 判定min初期値に等しいか否かを-1アレイ満たすか否か、すなわち、numbers[i] > numbers[i+1]条件と、
  • の場合min==-1、2つの状況が考えられます。最小値が最初または最後であるため、2つの数値を比較します。
    • の場合numbers[0] < numbers[numbers.length-1]min = numbers[0];
    • の場合numbers[0] > numbers[numbers.length-1]min = numbers[numbers.length-1];
public class Solution {
    
    

    public static int minArray(int[] numbers) {
    
    
        int min = -1;
        for (int i = 0; i < numbers.length-1; i++){
    
    
            if (numbers[i] > numbers[i+1]){
    
    
                min = numbers[i+1];
                break;
            }
        }
        if (min == -1){
    
    
            if (numbers[0] < numbers[numbers.length-1]){
    
    
                min = numbers[0];
            }else {
    
    
                min = numbers[numbers.length-1];
            }
        }
        return min;
    }

    public static void main(String[] args) {
    
    
        int[] numbers = {
    
    2,3,4,5,1};
        int result = minArray(numbers);
        System.out.println(result);
    }
}

参照アルゴリズムとコード(二分探索法)

class Solution {
    
    
    public int minArray(int[] numbers) {
    
    
        int low = 0;
        int high = numbers.length - 1;
        while (low < high) {
    
    
            int middle = low + (high - low) / 2;
            if (numbers[middle] < numbers[high]) {
    
    
                high = middle ;
            } else if (numbers[middle] > numbers[high]) {
    
    
                low = middle + 1;
            } else {
    
    
                high -= 1;
            }
        }
        return numbers[low];
    }
}

おすすめ

転載: blog.csdn.net/pary__for/article/details/114527737
おすすめ