지식 점 14: 배열 에 1 - 100 의 중복 되 지 않 는 난수 문제 가 저장 되 어 있 습 니 다.
4838 단어 면접Android 흔 한 면접 문제
/**
* :
* 1-100 z
* .
*
* ,
* ,
* :
* :**
* */
private static void putRandomNumberIntoArrays(int[] arrays) {
int count =0;
do {
int randomNumber = new Random().nextInt(100)+1;
if (!isAlive(randomNumber,arrays)) {
arrays[count++] = randomNumber;
}
} while (!(count == arrays.length));
}
/*
*
*/
static boolean isAlive(int number,int[] arrays){
boolean isAlive = false;
for (int i = 0; i < arrays.length; i++) {
if (number == arrays[i]) {
isAlive = true;
}
}
return isAlive;
}
이 해법 은 보편적 인 사람들의 사고방식 에 부합 되 어야 한다. 다만 이렇게 하면 하나의 문 제 를 초래 할 수 있다. 수조 안의 난수 가 많 을 수록 중 복 될 확률 이 커진다. 즉, 더 많은 난수 를 생 성 해 야 하기 때문에 효율 이 매우 낮 기 때문에 추천 하지 않 는 다.하지만 다른 최적화 가 생각 나 지 않 는 다 면 먼저 참조 할 수 있다.다음은 최적화 해법 이다.
해법 2:
/**
* :
100 , 1-100
,
, (-1)
, , ,
* :***
* */
private static void putRandomNumberIntoArrays(int[] arrays) {
int datalength=100;
int[] data = new int[datalength];
for (int i = 0; i < data.length; i++) {
data[i] = i+1;
}
int count = 0;
do{
int rand =new Random().nextInt(datalength--);
int tmp=data[rand];
data[rand] = data[datalength];
data[datalength] = tmp;
arrays[count++] = data[datalength];
}while(count != arrays.length);
}
}
이 알고리즘 은 어느 정도 효율 문 제 를 최적화 시 켰 으 나 메모리 도 증가 시 켰 다.이 메모리 가 치 명 적 인 건 아니 지만그러나 전반적 으로 최적화 할 수 있 는 부분 이 있다.해법 3:
/**
* :
1-100 , , , (-1)
,
* :****
* */
private static void putRandomNumberIntoArrays(int[] arrays) {
int datalength =arrays.length;
for (int i = 0; i < arrays.length; i++) {
arrays[i]= i+1;
}
do{
int rand =new Random().nextInt(datalength--);
int tmp=arrays[rand];
arrays[rand] = arrays[datalength];
arrays[datalength] = tmp;
}while(datalength>0);
}
}
이 알고리즘 은 현재 생각 할 수 있 는 가장 좋 은 방법 입 니 다. 메모 리 를 추가 하지 않 을 뿐만 아니 라 무 작위 값 이 중복 되 는 문제 도 피 할 수 있 습 니 다.이것 과 해법 2 의 문 제 는 메모리 하 나 를 추가 하 는 지 여부 에 만 국한 되 며, 본질 적 으로 일치 하 므 로 참고 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
면접 예상 질문: CSS, Javascript 고급position 속성이란? display 속성이란? flex: 1차원 (가로 or 세로) 적으로 배치할 수 있는 방식 grid: 2차원 (가로, 세로 동시에) 적으로 배치할 수 있는 방식 reset.css vs. s...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.