编程之美 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的主要内容,如果未能解决你的问题,请参考以下文章

编程之美目录

代码之美:如何让编程成为一门艺术?

编程之美-线下分享总结篇

《Java并发编程之美》(翟陆续著)高清pdf

编程之美找符合条件的整数

设计模式之美——封装,继承,多态的意义