我的问题是我需要从数组中找到第二个最大值,但是我得到的值等于第一个值。请帮助
int[] nums = { 50, 6, 60, 70, 80, 90, 9, 150, 2, 35 };
int max = 0;
int secmax = 0;
for (int x = 0; x < nums.length; x++) {
if (nums[x] > max)
max = nums[x];
if (nums[x] > secmax && secmax != max)
secmax = nums[x];
}
System.out.println("1st H value: " + max);
System.out.println("2nd H Value: " + secmax);
答案 0 :(得分:3)
您的错误是循环中的条件 使用此代码:
public class Main{
public static void main(String[] args){
int[] nums = { 6, 9, 11, 1, 10 };
int max = nums[0];
int secmax = nums[0];
for(int x=1; x<nums.length; x++) {
if(nums[x]>max ) {
secmax = max;
max=nums[x];
}else if(nums[x]>secmax){
secmax=nums[x];
}
}
System.out.println("1st H value: " + max);
System.out.println("2nd H Value: " + secmax);
}
}
答案 1 :(得分:1)
您应在if.. else if
循环中使用for
结构:
for (int item : nums) {
if (item > max) {
secmax = max;
max = item;
} else if (item > secmax) {
secmax = item;
}
}
此算法的运行时间为O(n)。如果对数组进行排序,还有一个非常简洁的解决方案:
Arrays.sort(nums); // Dual-Pivot Quicksort O(nlogn)
System.out.println(nums[nums.length - 1]); // largest item
System.out.println(nums[nums.length - 2]); // second largest item
...
您可以获得任何n个最大的项目,但是在这种情况下,运行时间将为O(nlogn)
答案 2 :(得分:0)
步骤1:
迭代给定的array
第2步(如果条件为arr[i] > largest
,则为第一个):
如果当前数组值大于最大值,则
将最大值移至secondLargest并进行
当前值最大
第3步(如果条件为arr[i] > secondLargest
,则为秒)
如果当前值小于最大且大于秒最大,则 当前值变为secondLargest
public class SecondLargest {
public static void main(String[] args) {
int arr[] = {50,06,60,70,80,90,9,150,2,35};
int largest = arr[0];
int secondLargest = arr[0];
System.out.println("The given array is:" );
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] > largest) {
secondLargest = largest;
largest = arr[i];
} else if (arr[i] > secondLargest) {
secondLargest = arr[i];
}
}
System.out.println("\nSecond largest number is:" + secondLargest);
}
}
输出:
The given array is:
50 6 60 70 80 90 9 150 2 35
Second largest number is:90
答案 3 :(得分:0)
int max=nums[0],secMax=nums[0]
for (int x = 0; x < nums.length; x++) {
if (nums[x] > max) {
secMax=max;
max = nums[x];
}
}
secMax将排第二位
答案 4 :(得分:0)
int arr[] = {-50,10,80,78,67,86,34,276,8};
int max, scmax;
if(arr[0]>=arr[1]){
max = arr[0]; scmax=arr[1];}
else{max = arr[1]; scmax=arr[0];}
for (int i = 2; i < arr.length; i++) {
if (max <= arr[i]) {
scmax = max;
max = arr[i];
} else if(scmax<=arr[i]){ scmax = arr[i];}
}
System.out.println("max"+max);
System.out.println("scmax"+scmax);
答案 5 :(得分:0)
public class Secondlargest {
public static void main(String[] args) {
int arr[]= {5,3,6,8,9,11,5,74};
List <Integer> array = new ArrayList<Integer> ();
for(int i=0;i<arr.length;i++){
if (array.isEmpty()){
array.add(arr[i]);
}
else if(array.contains(arr[i])) {
}
else{
array.add(arr[i]);
}
}
Collections.sort(array);
System.out.println("Second Largest "+ array.get(array.size()-2));
}
}
答案 6 :(得分:0)
这可能是最简单的
public static void main(String[] args) {
int[] array = { 1, 2, 3, -1, -2, 4 };
Arrays.sort(array);
System.out.println(array[array.length-2]);
}