Java面試寶典——求陣列中兩兩相加等於指定數的組合種數 + 如何找出陣列中第k個最小的數
阿新 • • 發佈:2019-02-09
求陣列中兩兩相加等於指定數的組合種數
package demos.array; import java.util.Arrays; /** * @author wyl * @time 2018年7月9日下午3:54:14 */ public class FindSum { /** * 暴力法 * 時間複雜度 O(N^2) * @param a * @param sum */ public static void findSum(int[] a,int sum){ for(int i=0;i<a.length;i++){ for(int j=i;j<a.length;j++){ if (a[i]+a[j]==sum) { System.out.println(a[i]+","+a[j]); } } } } /** * 排序法 * 時間複雜度 O(nlogn) * @param a * @param sum */ public static void findSum2(int[] a,int sum){ Arrays.sort(a); int begin=0; int end=a.length-1; while(begin<end){ if (a[begin]+a[end]>sum) { end--; }else if (a[begin]+a[end]<sum) { begin++; }else { System.out.println(a[begin]+","+a[end]); begin++; end--; } } } public static void main(String[] args) { // TODO Auto-generated method stub int[] a={1,7,12,13,19,20,0}; System.out.println("~~~~~~~~~方法一~~~~~~~~"); findSum(a, 20); System.out.println("~~~~~~~~~方法二~~~~~~~~"); findSum2(a, 20); } }
如何找出陣列中第k個最小的數
package demos.array; import java.util.Arrays; /** * @author wyl * @time 2018年7月9日下午4:05:58 */ public class FindKMin { public static int findKMin(int[] a,int k){ if (k<0 || k>a.length) { return -1; } Arrays.sort(a); return a[k-1]; } public static void main(String[] args) { // TODO Auto-generated method stub int[] a={1,5,2,6,8,0,6}; System.out.println("第k個最小的數:"+findKMin(a, 4)); } }