重複する数値の問題を探します
3734 ワード
これは2つの面接問題で、私はとても面白いと思います.テーマ自体は難しくなく、考え方の問題です.
タイトル1:
既存の0-99は100個の整数で、それぞれ異なり、すべての数を1つの配列に入れ、ランダムに配置します.
配列長101は、余分な数字が0から99のいずれかの数であり、重複する数字を探し出す.
ソリューション:
暴力を繰り返す方法は言わないが、ここでは2つの良い方法を提供している.
タイトル2:
長さ100の配列があり、0~99の任意の数字が格納されており、数字ごとに1回、
配列中の数字は乱数であり、そこからランダムに1つの数字を取り出して0~99の別の数字に置き換え、
この繰り返しの数字を見つけてみましょう
ソリューション:
タイトル1:
既存の0-99は100個の整数で、それぞれ異なり、すべての数を1つの配列に入れ、ランダムに配置します.
配列長101は、余分な数字が0から99のいずれかの数であり、重複する数字を探し出す.
ソリューション:
暴力を繰り返す方法は言わないが、ここでは2つの良い方法を提供している.
public class Algo1
{
public static void main(String[] args)
{
int[] arr = new int[101];
create(arr);//
method1(arr);
method2(arr);
for(int i = 0; i < arr.length; i++)
{
System.out.print(arr[i] + " ");
}
}
/**
* 1:
* 0~99 99 , , , , 0 99 ,
*/
public static void method1(int[] arr)
{
int sum = 0;
for(int i = 0; i < arr.length; i++)
{
sum += arr[i];
}
int constant = 0;
for(int j = 0; j < 100; j++)
{
constant += j;
}
int value = sum - constant;
System.out.println(" :"+value);
}
/**
* 2:
* : a^b^b = a
*
* --------------------------
* , , 0~99
*/
public static void method2(int[] arr)
{
for(int i = 1; i < arr.length; i++)
{
arr[0] = arr[0]^arr[i];
}
for(int i = 0; i <= 99; i++)
{
arr[0] = arr[0]^i;
}
System.out.println(" :"+arr[0]);
}
/**
*
*/
public static void create(int[] arr)
{
for(int i = 0; i < arr.length; i++)
{
arr[i] = i;
}
arr[100] = 93;//
int temp,num1,num2;
//
for(int j = 0; j < 1000; j++)
{
num1 = (int) (Math.random()*101);
num2 = (int) (Math.random()*101);
temp = arr[num1];
arr[num1] = arr[num2];
arr[num2] = temp;
}
}
}
タイトル2:
長さ100の配列があり、0~99の任意の数字が格納されており、数字ごとに1回、
配列中の数字は乱数であり、そこからランダムに1つの数字を取り出して0~99の別の数字に置き換え、
この繰り返しの数字を見つけてみましょう
ソリューション:
public class Algo2
{
public static void main(String[] args)
{
int[] arr = new int[100];
create(arr);
for(int i = 0; i < 100; i++)
{
System.out.print(arr[i]+" ");
}
System.out.println("
");
System.out.println(" :"+method(arr));
}
/**
* :
* , ,
* temp[5] = 2, 5 。
* .
*/
public static int method(int[] arr)
{
int[] temp = new int[arr.length];
for(int i = 0; i < arr.length;i++)
{
temp[arr[i]]++;
if(temp[arr[i]] == 2)
{
return arr[i];
}
}
return -1;
}
/**
*
*/
public static void create(int[] arr)
{
for(int i = 0; i < arr.length; i++)
{
arr[i] = i;
}
int num1,num2,temp;
for(int i = 0; i < 1000; i++)
{
num1 = (int) (Math.random()*100);
num2 = (int) (Math.random()*100);
temp = arr[num1];
arr[num1] = arr[num2];
arr[num2] = temp;
}
do
{
num1 = (int) (Math.random()*100);
num2 = (int) (Math.random()*100);
}while(num1 == num2);
arr[num1] = arr[num2];
System.out.println(" :"+arr[num1]);
}
}