快排相关面试题

来源:互联网 发布:矩阵乘法分配律 编辑:程序博客网 时间:2024/05/12 11:43

包含N个数的数组,求所有和为16的两个数字的组合

首先用快排对数组进行排序

然后用类似快排的方法用两个指针从头尾进行相加,时间复杂度排序为O(nlogn),找组合为O(n)

用Java实现的:

public class test1 {private static int arr[]={9,3,5,12,21,7};public static void qsort(int i,int j){if(j>i){int medium=onesort(i,j);qsort(i,medium-1);qsort(medium+1,j);}}public static int onesort(int i,int j){int target=arr[i];boolean iTurn=false;while(i<j){if(iTurn){if(arr[i]>target){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;iTurn=false;}else{i++;}}else{if(arr[j]<target){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;iTurn=true;}else{j--;}}}return i;}public static void main(String args[]){int i=0;int j=arr.length-1;qsort(0,arr.length-1);for(int k=0;k<arr.length;k++){System.out.println(arr[k]);}while(i<j){if(arr[i]+arr[j]==16){System.out.println(arr[i]+"+"+arr[j]);i++;j--;}else if(arr[i]+arr[j]>16){j--;}else if(arr[i]+arr[j]<16){i++;}}}}


 

 

原创粉丝点击