思路
这道题其实与埃氏筛法 求素数 所用的思想是相同的,都是选取一个数组用来做标记,牺牲空间换取时间
如果给定一组数,要求判定这组数中哪些数是素数,则只需要根据埃氏筛法,判断该数的标记数组是true还是false即可。
java代码:
要求:时间复杂度O(n),只允许使用常量大小的辅助空间
package com.me;
import java.util.Arrays;
public class AgeSort {
public static void main(String[] args) {
int[] ages = new int[]{23,45,32,43,21,24,25,23,22,22,21};
AgeSort as = new AgeSort();
as.sortAge(ages);
System.out.println(Arrays.toString(ages));
}
public void sortAge(int[] ages){
int oldAge = 70;
int youngAge = 17;
int[] timeOfAge = new int[oldAge+1];
for(int i = youngAge; i <= oldAge; i++){
timeOfAge[i] = 0;
}
for(int j = 0; j < ages.length; j++){
int a = ages[j];
timeOfAge[a]++;
}
int index = 0;
for(int i = youngAge; i <= oldAge; i++){
for(int j = 0; j < timeOfAge[i]; j++){
ages[index] = i;
index++;
}
}
}
}