码迷,mamicode.com
首页 > 其他好文 > 详细

荷兰国旗问题

时间:2021-06-17 16:35:19      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:index   turn   and   思想   art   部分   void   时间复杂度   else   

问题描述:给定一个数组arr,和一个数num,请把小于num的数放在数组的 左边,等于num的数放在数组的中间,大于num的数放在数组的 右边。 要求额外空间复杂度O(1),时间复杂度O(N)

问题分析:这部分其实和快排中的partition部分很相似,其思想就是将任意一个数组分成三部分,分别是小于 等于 大于 某个num的数组

public class code_08_NetherlandsFlag {
    public static int[] partition(int[] arr, int l ,int r ,int num){
        int less = l - 1;
        int more = r + 1;

        int index = l;
        while (index < more)
        {
            if(arr[index] < num){
                swap(arr ,++less,index++ );
            }
            else if(arr[index] > num)
            {
                swap(arr ,--more,index );
            }
            else{
                index ++;
            }
        }
        return new int[] {less + 1 ,more -1 };
    }

    public static void swap(int[] arr,int i,int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

 

荷兰国旗问题

标签:index   turn   and   思想   art   部分   void   时间复杂度   else   

原文地址:https://www.cnblogs.com/zhang-liubai/p/14891007.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!