ソートを使用せずに、配列内で 2 番目に小さい数を見つけるメソッドを作成しました。配列内で 3 番目に小さい数を見つけるために同じロジックを拡張できると思ったのですが、そう簡単ではないことに気付きました。睡眠不足か何かによる..以下は、findSecondSmallest と findThirdSmallest の私のコードです..誰かが後で私のロジックの欠陥を修正できますか?
public class ArrayElementSelection{
public static int findSecondSmallest(int[] a){
int N = a.length;
int min = 0;
int secondSmallest = 0;
for(int i=1;i<N;i++){
if(a[i] < a[min]){
secondSmallest = min;
min = i;
}else if(a[i] < a[secondSmallest]){
secondSmallest = i;
}
}
return a[secondSmallest];
}
public static int findThirdSmallest(int[] a){
int N = a.length;
int min = 0;
int secondSmallest = 0;
int thirdSmallest = 0;
for(int i=1;i<N;i++){
if(a[i] < a[min]){
min = i;
}else if(a[i] < a[secondSmallest]){
secondSmallest = i;
}else if(a[i]< a[thirdSmallest]){
thirdSmallest = i;
}
}
return a[thirdSmallest];
}
public static void main(String[] args) {
int[] a = new int[]{4,2,3,1,5};
System.out.println(findThirdSmallest(a));
}
}
>> 4