回転した配列があり、log n時間にその最小要素を見つける必要があります。私はいくつかのソリューションにhereを発見し、それらのいずれかを理解することはできません:私は、次の3つのオプションを参照してください回転した配列で分を求めます。実装を理解する
public int findMin(int[] nums) {
if(nums==null || nums.length==0)
return -1;
int i=0;
int j=nums.length-1;
while(i<=j){
// Sorted (sub)array. We just return its first element.
if(nums[i]<=nums[j])
return nums[i];
int m=(i+j)/2;
if(nums[m]>=nums[i]){
i=m+1; // The pivot is in the right subarray. So we go right
}else{
j=m; // m is the index of the pivot. Why don't we just return it?
}
}
return -1;
}
:(サブ)配列をソートする
- を。最初の要素を返します。
- ピボットは右側のサブアレイにあります。だから我々は正しく行く。
m
はピボットのインデックスです。だから私たちはそれを返さないのですか?
「ピボット」とはどういう意味ですか、なぜあなたは「m」がそのインデックスだと思いますか? – user2357112
ピボットは、アレイが回転する要素です。ピボットは 'm'または' m'の右側の要素であるため、 'm'はピボットのインデックスです。 –
なぜそれは左にできないのですか? – user2357112