从 java 中的整数数组中获得相同值的最大和第二大数字?
largest and second largest number getting same value from integer array in java?
这里我编写了代码来打印 array.But 中的最大和第二大数字,当我的数组中有两次最大数字时,它会同时打印最大和第二大数字 same.Can 有人告诉我我在做什么 mistakes.This 是我的代码。
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
int largest = arr[0];
int secondLargest = arr[0];
// check the condition
for (int i = 0; i < arr.length; i++) {
// this condition check for largest number
if (arr[i] > largest) {
secondLargest = largest;
largest = arr[i];
} else if (arr[i] > secondLargest) {
secondLargest = arr[i];
}
}
// print the result
System.out.println("second largest number is:" + secondLargest);
System.out.println("largest number is:" + largest);
输出为:
second largest number is:96
largest number is:96
您正在将 largest
和 secondLargest
初始化为数组的第一个元素,因此如果第一个元素已经是最大的,那么最后两个元素都会保持最大。
更好的初始化是将它们设置为一个真正的小值:
int largest = Integer.MIN_VALUE;
int secondLargest = Integer.MIN_VALUE;
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
有两个值为96的数字,所以96 > 96失败后,进入arr[i] > secondLargest的条件,并通过该测试。这就是为什么最大和第二大为相同的数字 96 的原因。
有 2 个问题:
1) 最大和第二大的初始化(使用Integer.MIN_VALUE);您在第一次迭代时设置了第二大,它是 array
中最大的数字
2)设置secondLargest的条件;你还应该检查:arr[i] < largest
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
int largest = Integer.MIN_VALUE;
int secondLargest = Integer.MIN_VALUE;
// check the condition
for (int i = 0; i < arr.length; i++) {
// this condition check for largest number
if (arr[i] > largest) {
secondLargest = largest;
largest = arr[i];
} else if (arr[i] > secondLargest && arr[i] < largest) {
secondLargest = arr[i];
}
}
输出:
second largest number is:92
largest number is:96
这是一个使用 binarySearch
的解决方案
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
Arrays.sort(arr);
int largest = arr[arr.length - 1];
int binarySearch = Arrays.binarySearch(arr, largest);
System.out.println("largest = " + largest);
// need to handle the case for arrays which are...
// - empty
// - contain only one int
// - the largest int is on index zero
System.out.println("second largest = " + arr[binarySearch - 1]);
这里我编写了代码来打印 array.But 中的最大和第二大数字,当我的数组中有两次最大数字时,它会同时打印最大和第二大数字 same.Can 有人告诉我我在做什么 mistakes.This 是我的代码。
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
int largest = arr[0];
int secondLargest = arr[0];
// check the condition
for (int i = 0; i < arr.length; i++) {
// this condition check for largest number
if (arr[i] > largest) {
secondLargest = largest;
largest = arr[i];
} else if (arr[i] > secondLargest) {
secondLargest = arr[i];
}
}
// print the result
System.out.println("second largest number is:" + secondLargest);
System.out.println("largest number is:" + largest);
输出为:
second largest number is:96
largest number is:96
您正在将 largest
和 secondLargest
初始化为数组的第一个元素,因此如果第一个元素已经是最大的,那么最后两个元素都会保持最大。
更好的初始化是将它们设置为一个真正的小值:
int largest = Integer.MIN_VALUE;
int secondLargest = Integer.MIN_VALUE;
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
有两个值为96的数字,所以96 > 96失败后,进入arr[i] > secondLargest的条件,并通过该测试。这就是为什么最大和第二大为相同的数字 96 的原因。
有 2 个问题:
1) 最大和第二大的初始化(使用Integer.MIN_VALUE);您在第一次迭代时设置了第二大,它是 array
中最大的数字2)设置secondLargest的条件;你还应该检查:arr[i] < largest
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
int largest = Integer.MIN_VALUE;
int secondLargest = Integer.MIN_VALUE;
// check the condition
for (int i = 0; i < arr.length; i++) {
// this condition check for largest number
if (arr[i] > largest) {
secondLargest = largest;
largest = arr[i];
} else if (arr[i] > secondLargest && arr[i] < largest) {
secondLargest = arr[i];
}
}
输出:
second largest number is:92
largest number is:96
这是一个使用 binarySearch
的解决方案int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
Arrays.sort(arr);
int largest = arr[arr.length - 1];
int binarySearch = Arrays.binarySearch(arr, largest);
System.out.println("largest = " + largest);
// need to handle the case for arrays which are...
// - empty
// - contain only one int
// - the largest int is on index zero
System.out.println("second largest = " + arr[binarySearch - 1]);