在 n 个数字的 array/list 中找到 3 个最大的数字而不进行排序
Finding the 3 largest numbers in an array/list of n numbers without the sorting
当我做作业时,当我必须在数字列表(未指定数据结构)中找到最大的 3 个数字时,我真的很困惑。我对我必须做的事情感到非常震惊。有帮助吗?
你可以保留三个变量来存储三个最大值,并遍历数组:
你需要处理三种情况:
当当前元素大于最大元素时。需要相应更新第二和第三大。
当当前元素大于第二大时。需要更新第三大
当当前元素大于第三大时
我的code如果你还卡住了
for(int i : array)
if(i > largest)
//Do smt
else if(i > second)
//Do smt
else if(i > third)
//Do smt
int firstNumber=5;
int secondNumber=3;
int thirdNumber=4;
int largestNumber=(firstNumber>secondNumber)?firstNumber:(secondNumber>thirdNumber)?secondNumber:thirdNumber;
System.out.println("largestNumber : "+largestNumber);
最简单的方法:
List<Number> numbers = new ArrayList<Number>();
numbers.add(5);
numbers.add(4);
numbers.add(3);
numbers.add(2);
numbers.add(1);
numbers.add(6);
SortedSet<Number> sortedNumbers= new TreeSet<Number>();
sortedNumbers.addAll(numbers);
SortedSet<Number> subSet = sortedNumbers.subSet(sortedNumbers.size()-2, sortedNumbers.size()+1);
for (Number subSet1 : subSet) {
System.out.println(""+subSet1);
}
我的 leetcode 解决方案 python3 时间复杂度为 O(N)。
class Solution:
def thirdMax(self, A: List[int]) -> int:
sm=float('-inf')
fm=float('-inf')
tm=float('-inf')
N=len(A)
i=0
while i<N:
if A[i]>fm:
tm=sm
sm=fm
fm=A[i]
elif A[i]>sm and A[i]<fm:
tm=sm
sm=A[i]
elif (A[i]>tm and A[i]<sm):
tm=A[i]
i+=1
return tm if tm != float('-inf') else fm
当我做作业时,当我必须在数字列表(未指定数据结构)中找到最大的 3 个数字时,我真的很困惑。我对我必须做的事情感到非常震惊。有帮助吗?
你可以保留三个变量来存储三个最大值,并遍历数组:
你需要处理三种情况:
当当前元素大于最大元素时。需要相应更新第二和第三大。
当当前元素大于第二大时。需要更新第三大
当当前元素大于第三大时
我的code如果你还卡住了
for(int i : array)
if(i > largest)
//Do smt
else if(i > second)
//Do smt
else if(i > third)
//Do smt
int firstNumber=5;
int secondNumber=3;
int thirdNumber=4;
int largestNumber=(firstNumber>secondNumber)?firstNumber:(secondNumber>thirdNumber)?secondNumber:thirdNumber;
System.out.println("largestNumber : "+largestNumber);
最简单的方法:
List<Number> numbers = new ArrayList<Number>();
numbers.add(5);
numbers.add(4);
numbers.add(3);
numbers.add(2);
numbers.add(1);
numbers.add(6);
SortedSet<Number> sortedNumbers= new TreeSet<Number>();
sortedNumbers.addAll(numbers);
SortedSet<Number> subSet = sortedNumbers.subSet(sortedNumbers.size()-2, sortedNumbers.size()+1);
for (Number subSet1 : subSet) {
System.out.println(""+subSet1);
}
我的 leetcode 解决方案 python3 时间复杂度为 O(N)。
class Solution:
def thirdMax(self, A: List[int]) -> int:
sm=float('-inf')
fm=float('-inf')
tm=float('-inf')
N=len(A)
i=0
while i<N:
if A[i]>fm:
tm=sm
sm=fm
fm=A[i]
elif A[i]>sm and A[i]<fm:
tm=sm
sm=A[i]
elif (A[i]>tm and A[i]<sm):
tm=A[i]
i+=1
return tm if tm != float('-inf') else fm