這幾天筆試中有乙個題目,讓輸出乙個陣列中第二大的數的下標。第一想法就是排序,然後輸出第二大的陣列的下標,但是排序的話會出現交換,原數的下標也會變。所以樓主想把原陣列複製乙份儲存下來,然後對原陣列排序,找出第二大的數,與複製的陣列比較,然後輸出下標。這裡有乙個問題,如果直接寫
int a = {};
int b = a;
當陣列a中發生變化的時候,b中也會發生變化。這裡涉及到了傳值和傳址的問題。在複製陣列的時候,也叫做深複製和淺複製。經過幾次錯誤的嘗試之後,最終得到的**如下
public class findsecondmax ;
int res = findsecondmax(a);
for (int i = 0; i < a.length; i++)
system.out.println(res);
} public static int findsecondmax(int a)
system.out.println();
for (int i = 0; i < a.length; i++)
}} int x = a[a.length - 2];
system.out.println("x="+x);
//第二次輸出b陣列,和改變之前的a陣列一樣的
for (int i = 0; i < b.length; i++)
system.out.println();
for (int i = 0; i < b.length; i++)
} return result;
}}
輸出結果
1 3 8 5 6 9 2 4
x=81 3 8 5 6 9 2 4
1 2 3 4 5 6 8 9 2
最後乙個數字2,表示第二大的數的下標是2
找出乙個陣列中第二大的數
public class 找出乙個陣列中第二大的數 else if arr i max2 arr i max1 return max2 public static void main string args int a find arr system.out.println a 首先設定兩個索引ma...
找出陣列中第二大的數
給你乙個陣列,求出其中第二大的數 比如陣列a 1,2,3,4,5,6,7,8,9 其中第二大的數為8,返回8即可 分析 一般情況下都是求最大值,呵呵,這道題很有趣。想想也不難,可以在掃瞄最大值的同時,求出第二大的值,就是比當前最大值大的數賦給最大值,然後用第二大的值與先前的最大值比較,如果小,則用先...
找出陣列中第二大的數
include include includeusing namespace std 初始化最大值為a 0 次大值為a 1 遍歷一次,每次比較並更新最大值和次大值,最後就可以得到次大值。這種方法時間複雜度為o n bool invalidinput false int findsecondmax i...