查找数组中的第二个最小整数

在我们的赋值中,我们需要递归地在一个数组中找到第二个最小的整数。 但是,为了更好地理解这个主题,我想先迭代地(在这个网站的帮助下)和我自己的递归。

不幸的是,迭代地执行它是非常令人困惑的。 我知道解决方案很简单,但我无法解决它。

以下是我的代码,到目前为止:

public static void main(String[] args) { int[] elements = {0 , 2 , 10 , 3, -3 }; int smallest = 0; int secondSmallest = 0; for (int i = 0; i < elements.length; i++) { for (int j = 0; j < elements.length; j++) { if (elements[i] < smallest) { smallest = elements[i]; if (elements[j] < secondSmallest) { secondSmallest = elements[j]; } } } } System.out.println("The smallest element is: " + smallest + "\n"+ "The second smallest element is: " + secondSmallest); } 

这适用于少数数字,但不是全部。 数字会发生变化,因为内部if条件不如外部if条件有效。

数组重新排列是被禁止的。

试试这个。 当最小数字是第一个时,第二个条件用于捕获事件

  int[] elements = {-5, -4, 0, 2, 10, 3, -3}; int smallest = Integer.MAX_VALUE; int secondSmallest = Integer.MAX_VALUE; for (int i = 0; i < elements.length; i++) { if(elements[i]==smallest){ secondSmallest=smallest; } else if (elements[i] < smallest) { secondSmallest = smallest; smallest = elements[i]; } else if (elements[i] < secondSmallest) { secondSmallest = elements[i]; } } 

UPD by @Axel

  int[] elements = {-5, -4, 0, 2, 10, 3, -3}; int smallest = Integer.MAX_VALUE; int secondSmallest = Integer.MAX_VALUE; for (int i = 0; i < elements.length; i++) { if (elements[i] < smallest) { secondSmallest = smallest; smallest = elements[i]; } else if (elements[i] < secondSmallest) { secondSmallest = elements[i]; } } 
  int[] arr = { 4, 1, 2, 0, 6, 1, 2, 0 }; int smallest = Integer.MAX_VALUE; int smaller = Integer.MAX_VALUE; int i = 0; if (arr.length > 2) { for (i = 0; i < arr.length; i++) { if (arr[i] < smallest) { smaller = smallest; smallest = arr[i]; } else if (arr[i] < smaller && arr[i] > smallest) { smaller = arr[i]; } } System.out.println("Smallest number is " + smallest); System.out.println("Smaller number is " + smaller); } else { System.out.println("Invalid array !"); } } 

简单地说,你可以做到这一点

 int[] arr = new int[]{34, 45, 21, 12, 54, 67, 15}; Arrays.sort(arr); System.out.println(arr[1]); 
 public static int findSecondSmallest(int[] elements) { if (elements == null || elements.length < 2) { throw new IllegalArgumentException(); } int smallest = elements[0]; int secondSmallest = elements[0]; for (int i = 1; i < elements.length; i++) { if (elements[i] < smallest) { secondSmallest = smallest; smallest = elements[i]; } else if (elements[i] < secondSmallest) { secondSmallest = elements[i]; } } return secondSmallest; } 

你可以在O(n)时间内完成。 下面是python代码

 def second_small(A): if len(A)<2: print 'Invalid Array...' return small = A[0] second_small = [1] if small > A[1]: second_small,small = A[0],A[1] for i in range(2,len(A)): if A[i] < second_small and A[i]!=small: if A[i] < small: second_small = small small = A[i] else: second_small = A[i] print small, second_small A = [12, 13, 1, 10, 34, 1] second_small(A) 
  public static void main(String[] args) { int[] elements = {-4 , 2 , 10 , -2, -3 }; int smallest = Integer.MAX_VALUE; int secondSmallest = Integer.MAX_VALUE; for (int i = 0; i < elements.length; i++) { if (smallest>elements[i]) smallest=elements[i]; } for (int i = 0; i < elements.length; i++) { if (secondSmallest>elements[i] && elements[i]>smallest) secondSmallest=elements[i]; } System.out.println("The smallest element is: " + smallest + "\n"+ "The second smallest element is: " + secondSmallest); } 
  try this ... first condition checks if both values are less than value in array. second condition if value is less than small than smallest=element[i] else secondSmallest=elements[i].. public static void main(String[] args) { int[] elements = {0 , 2 , 10 , 3, -3 }; int smallest = elements[0]; int secondSmallest = 0; for (int i = 0; i < elements.Length; i++) { if (elements[i] 
 public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Enter array size = "); int size=in.nextInt(); int[] n = new int[size]; System.out.println("Enter "+ size +" values "); for(int i=0;in[i]){ ssmall=small; small=n[i]; }else if(ssmall>n[i]) ssmall=n[i]; } // finding second small if first element itself small if(small==n[0]){ ssmall=n[1]; for(int i=1;in[i]){ ssmall=n[i]; } } } System.out.println("Small "+ small+" sSmall "+ ssmall); in.close(); } 
 public static void main(String[] args) { int arr[] = {6,1,37,-4,12,46,5,64,21,2,-4,-3}; int lowest =arr[0]; int sec_lowest =arr[0]; for(int n : arr){ if (lowest > n) { sec_lowest = lowest; lowest = n; } else if (sec_lowest > n && lowest != n) sec_lowest = n; } System.out.println(lowest+" "+sec_lowest); } 

在此处输入图像描述

 public class SecondSmallestNumberInArray { public static void main(String[] args) { int arr[] = { 99, 76, 47, 85, 929, 52, 48, 36, 66, 81, 9 }; int smallest = arr[0]; int secondSmallest = arr[0]; System.out.println("The given array is:"); boolean find = false; boolean flag = true; for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(""); while (flag) { for (int i = 0; i < arr.length; i++) { if (arr[i] < smallest) { find = true; secondSmallest = smallest; smallest = arr[i]; } else if (arr[i] < secondSmallest) { find = true; secondSmallest = arr[i]; } } if (find) { System.out.println("\nSecond Smallest number is Array : -> " + secondSmallest); flag = false; } else { smallest = arr[1]; secondSmallest = arr[1]; } } } } **Output is** D:\Java>java SecondSmallestNumberInArray The given array is: 99 76 47 85 929 52 48 36 66 81 9 Second Smallest number is Array : -> 36 D:\Java> 

试试这个。

  public static void main(String args[]){ int[] array = new int[]{10, 30, 15, 8, 20, 4}; int min, secondMin; if (array[0] > array[1]){ min = array[1]; secondMin = array[0]; } else{ min = array[0]; secondMin = array[1]; } for (int i=2; i min) && (array[i] < secondMin)){ secondMin = array[i]; } } System.out.println(secondMin); } 

我在javascript中使用了Sortfunction

 function sumTwoSmallestNumbers(numbers){ numbers = numbers.sort(function(a, b){return a - b; }); return numbers[0] + numbers[1]; }; 

通过为sort函数提供compareFunction ,数组元素根据函数的返回值进行排序。

 public static int getSecondSmallest(int[] arr){ int smallest = Integer.MAX_VALUE; int secondSmallest = Integer.MAX_VALUE; for(int i=0;i arr[i]){ secondSmallest = smallest; smallest = arr[i]; }else if (secondSmallest > arr[i] && arr[i] != smallest){ secondSmallest = arr[i]; } System.out.println(i+" "+smallest+" "+secondSmallest); } return secondSmallest; } 

只是尝试了一些测试用例并且它有效。 请检查一下是否正确!

 class A{ public`enter code here`static void main (String args[]){ int array[]= {-5, -4, 0, 2, 10, 3, -3}; int min; int second_min; if(array[0] array[i] && min > array[i]){ second_min=min; min=array[i]; }else if(second_min > array[i] && min < array[i]){ min=min; second_min=array[i]; } } System.out.println(min); System.out.println(second_min); } }