编程之美 2.5
Posted xinyi-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程之美 2.5相关的知识,希望对你有一定的参考价值。
解法1:利用分治法,先将某个数排在正确得位置,即比他大的数在左边,比他小的数在右边。然后比较他及他后面的数与k的大小。
import java.util.*; public class Main{ public static void main(String[] args) { int[] nums={10,3,2,9,8,5,7,6,20,1}; int k=5; int[] res=new int[k]; int len=nums.length; res=deepFun(nums,0,len-1,k); for(int i=0;i<5;i++){ System.out.println(res[i]); } } public static int[] deepFun(int[] nums,int start,int end,int k){ int temp=nums[start]; int left=start; int right=end; while(left<right){ while(left<right && nums[right]<=temp){ right--; } if(left<right){ nums[left]=nums[right]; nums[right]=temp; } while(left<right && nums[left]>=temp){ left++; } if(left<right){ nums[right]=nums[left]; nums[left]=temp; } } int[] res=new int[k]; if(left-start+1==k){ System.arraycopy(nums,start,res,0,k); }else if(left-start+1>k){ res=deepFun(nums,start,left,k); }else{ System.arraycopy(nums,start,res,0,left-start+1); int[] next=deepFun(nums,left+1,end,k-left+start-1); System.arraycopy(next,0,res,left-start+1,k-left+start-1); } return res; } }
以上是关于编程之美 2.5的主要内容,如果未能解决你的问题,请参考以下文章