一道面试题注记

简介:

[java]
public static int[] findTopNValues(int[] anyOldOrderValues, int n) {
Arrays.sort(anyOldOrderValues);
int[] result = new int[n];
System.arraycopy(anyOldOrderValues, anyOldOrderValues.length - n,
result, 0, n);
return result;
}
[/java]
Arrays.sort(int[])使用的是快排,平均的时间复杂度是O( n lg(n)),在一般情况下已经足够好。那么有没有平均情况下O(n)复杂度的算法?这个还是有的,这道题目其实是选择算法的变形,选择一个数组中的第n 大元素,可以采用类似快排的方式划分数组,然后只要在一个子段做递归查找就可以,平均状况下可以做到O(n)的时间复杂度,对于这道题来说稍微变形下算法即可解决:
[java]
/**

[/java]
选择算法还有最坏情况下O(n)复杂度的实现,有兴趣可以读算法导论和维基百科。题外,我测试了下这两个实现,在我的机器上大概有2倍多的差距,还是很明显。

本文来源于"阿里中间件团队播客",原文发表时间" 2010-10-28"

相关文章
|
3月前
|
Java 程序员
【面试问题】happens-before 是什么?
【1月更文挑战第27天】【面试问题】happens-before 是什么?
|
3月前
|
安全 Java 编译器
面试总结
面试总结
|
6月前
|
消息中间件 NoSQL Java
面试多起来了
面试多起来了
41 0
面试多起来了
|
11月前
|
存储 Java C#
C# 面试知识
C# 面试知识
74 0
|
消息中间件 API
准备面试了~
金三银四,准备面试了~
|
存储 C++ 索引
C++面试问题准备
C++面试问题准备
211 0
|
移动开发 JavaScript 前端开发
2022面试不完全指南
2022面试不完全指南
93 0
|
SQL 网络协议 Java
IT面试
一、找工作前的准备 《王道程序员求职宝典》、《剑指 offer》、上课笔记+代码+视频、项目代码、简历。 二、面试流程 1. 一般都是先做一套笔试题,大概三十分钟。 2. HR 问一些问题,比如:为什么离职?之前在什么公司上班?薪水多少? 3. 技术面试,首先问你笔试
108 0
|
XML 设计模式 安全
面试总结20201101
一、什么是泛型、为什么要使用以及泛型擦除
67 0
面试总结20201101
|
XML 设计模式 安全
面试总结之20201101
一、什么是泛型、为什么要使用以及泛型擦除
97 0
面试总结之20201101