求数组中两两相加等于指定数的组合种数
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));
}
}