【发布时间】:2017-01-15 07:38:05
【问题描述】:
问题说明:从包含数十亿数字的文件中找出最大 10 个数字
输入:
97911
98855
12345
78982
.....
.....
我实际上想出了以下解决方案
- 最佳案例复杂度
O(n)- 当文件中的数字按降序排列时 - 最坏情况复杂度
O(n*10) ~ O(n)当文件有数字升序时 - 平均
复杂性~
O(n)
空间复杂度在所有情况下都是O(1)
我正在使用文件阅读器和一个存储最多 10 个数字的排序数组来读取文件。我将检查 currentLine 是否大于数组中的最小元素 - 如果是,将通过交换将其插入正确的位置。
Scanner sc = new Scanner(new FileReader(new File("demo.txt")));
int[] maxNum = new int[10];
while(sc.hasNext()){
int phoneNumber = Integer.parseInt(sc.nextLine());
if(phoneNumber>maxNum[9]){
maxNum[9] = phoneNumber;
for(int i =9;i>0;i--){
if(maxNum[i]>maxNum[i-1]){
int temp = maxNum[i];
maxNum[i] = maxNum[i-1];
maxNum[i-1] = temp;
}
}
}
}
如果有更好的方法来实现,我正在寻找反馈
【问题讨论】:
-
FYR,
O(n*10)与O(n)相同。 -
你可以使用内置的方法来找到最大值,当你找到一个最大值时存储这个值然后删除它,然后再做10次。
-
@Null 。 .你建议哪种内置方法..它不需要多次传递和更多迭代
-
检查this,它会帮助你。
-
值有上限吗?