标签:rgs ret ++ length return fun void code str
解法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; } }
标签:rgs ret ++ length return fun void code str
原文地址:https://www.cnblogs.com/xinyi-blog/p/8819878.html