タイトル03インタビューの質問:重複した数字の配列を見つけます
長さNUMS n個のアレイ内のすべての数値は0〜N-1の範囲です。一部のデジタル配列が重複しているが、各回数が数回繰り返したかわからない、繰り返し何の数字かわかりません。重複した数字のいずれかの配列を見つけてください。
//一般的な考え方:便利な小から大への最初の配列要素のない繰り返しが存在しない場合、各要素とそのインデックスが同じである必要がありますが、あなたは、検索を並べ替えることができますが完了した
/ *
具体的に:配列でインデックスが等しくない要素がある場合、各要素が横断し、次に
この要素のインデックスを持つ要素がある場合、要素と同じ要素が繰り返されている
添字を持つ要素がある場合この要素の値が同一ではない、2つのExchange
たとえば、次の
入力
[2、3、1、0、2、5、3]
出力:2または3
``
public class Solution {
public int findRepeatNumber(int[] nums)
{
int t=0;
for(int i=0;i<nums.length;i++)
{
if(i!=nums[i])
{
if(nums[i]==nums[nums[i]])
// System.out.print(nums[i]+" ");
return nums[i];
else
{
t=nums[i];
nums[i]=nums[nums[i]];
nums[t]=t;
}
}
}
return 0;
}
public static void main(String[] args)
{
Solution ss=new Solution();
int[] nums={2, 3, 1, 0, 2, 5, 3};
ss.findRepeatNumber(nums);
}
}
時間計算量はO(N)であります
- 実行する場合:1ミリ秒、のJavaに提出するすべてのユーザーの94.14パーセントを打つ
メモリ消費量:58.6メガバイトには、すべてのJavaの提出にユーザーの100.00パーセントを破りました