以下は、Javaアレイ番号の数を導入するためのいくつかの方法です。特定のコンテンツは次のとおりです。
方法1:
配列のソート、そして中間値は間違いなく見つかる値です。最小時間の複雑さ(クイックソート)o(nlogn)とトラバーサルを並べ替えます。
方法2:
ハッシュテーブルメソッド、つまり、各配列の発生数をカウントし、発生が配列の長さよりも大きい数値を出力する数字を使用します。
方法3:
発生数は配列の長さの半分を超えており、この数が他の数値の合計よりも多く表示されることを示しています。
毎回2つの異なる数値を削除することを検討してください。残りの数値の発生数は、総数を超えています。プロセスを絶えず繰り返し、他の数値を除外し、最終的に発生の半分以上の数字を見つけます。この方法の時間の複雑さはo(n)であり、空間の複雑さはo(1)です。
アイデアを変えるために、これは実際の物理的削除ではなく、カウントによって達成できます。配列を通過するプロセス中に、2つの値を保存します。1つは配列の数で、もう1つは発生数です。次の数に移動する場合、この数値が以前に保存された数と同じ場合、回数は1つになり、異なる場合、回数は1減少します。
public int morehalf(int [] nums){int result = 0; int count = 1; if(nums.length == 0)return -1; result = nums [0]; 結果;}方法4:
前述の速い列の並べ替えの改善、配列がソートされている場合、中央の位置の数はあなたが望む値でなければなりません。ソートアレイの時間の複雑さはO(nlog(n))ですが、この質問では、時間の複雑さo(n)内で見つけることができるより良いアルゴリズムがあります。
クイックソートアルゴリズムから派生したPartition()メソッドが最も重要な方法です。このメソッドはインデックスを返します。インデックスは、インデックス位置の数値がソートされることを確認できます。インデックスの左側の数は、インデックスの位置にある数値よりも小さく、インデックスの右側の数はインデックスの位置にある数よりも大きくなります。この質問は、このアイデアを使用して解決できます。
パーティション()を介してインデックスを返します。 index == midの場合、それは配列の中央値が見つかったことを意味します。 IndexMidの場合、中央値が[Start、Index-1]の間にあることを意味します。インデックスの終わり==ミッドループが取得されることを知っています。
public int pertition(int [] nums、int start、int end){int pivotkey = nums [start]; int ovirion = start; while(start <end && nums [end]> = pivotkey)end-; swap(nums、start、end); swap(nums、origin、end); return end;} p int [] swap(int [] int、int x、int y){int temp = ints [x]; ints [x] = ints [y]; ints [y] = temp; INTを返す; } public int morethanhalf(int [] nums){if(nums.length == 0)return -1; int start = 0; int end = nums.length-1; int index =パーティション(nums、start、end); int mid = nums.length/2;パーティション(nums、start、index-1); else {// index+1の配列インデックスをend end section = partition(nums、index+1、end);}} return nums [index];}}上記のコンテンツでは、Arrayに半分以上の数字が表示される数値を実装するJavaコードの関連コンテンツを紹介します。私はそれが誰にでも役立つことを願っています!