記事ディレクトリ
1. タイトル
マジックインデックス。配列にはA[0...n-1]
、条件を満たすいわゆるマジック インデックスがありますA[i] = i
。ソートされた整数の配列を指定して、配列 A にマジック インデックスがあればそれを検索し、存在しない場合は -1 を返すメソッドを作成します。複数のマジック インデックスがある場合は、インデックス値が最も小さいものが返されます。
例 1:
入力: nums = [0, 2, 3, 4, 5]
出力: 0
説明:添字 0 の要素は 0 です
例 2:
入力: nums = [1, 1, 1]
出力: 1
例証します:
- num の長さは [1, 1000000] の間です。
- このタイトルは、元の本のフォローアップであり、配列に重複した要素が含まれる可能性があるバージョンです。
2. C# の問題の解決策
順番にトラバースしますが、プルーニングします。現在の値がインデックスより大きい場合は、現在の値のインデックス位置にジャンプします。
public class Solution {
public int FindMagicIndex(int[] nums) {
if (nums[0] > nums.Length || nums[^1] < 0) return -1;
int i = 0;
while (i < nums.Length) {
if (nums[i] == i) return i; // 找到魔术索引,立即返回
if (nums[i] > i) i = nums[i]; // 如果当前值大于索引,则跳转到当前值的索引位置
else i++; // 否则,继续判断下一个位置
}
return -1;
}
}
- 時間: 88 ミリ秒、C# を使用しているユーザーの 81.82% を上回りました
- メモリ: 41.7 MB、C# を使用しているユーザーの 72.73% を上回ります