zoukankan      html  css  js  c++  java
  • 荷兰国旗

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

    思路:从l到r遍历,

      当curr = num , 不动 走下一个

      当curr < num , curr和less 的后一个做交换 

      当 curr > num , curr 和 more 的前一个作交换(curr不忘后走,待定数)

    package my_basic;
    
    public class NetherlandsFlag {
        
        public static int[] partition(int[] arr, int l, int r, int num) {
            
            int less= l-1;
            int more = r+1;
            while (l < more) {
                if (arr[l] < num) {
                    swap(arr, ++less, l++);
                }else if (arr[l]>num) {
                    swap(arr,--more,l);
                }else {
                    l++;
                }
            }
            
            return new int[] {less + 1 , more - 1};
        }
        
        
        private static void swap(int[] arr, int i, int j) {
            int tmp;
            tmp = arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;        
        }
    
        //对数器
        public static int[] generateRandomArray(int maxSize,int maxValue) {
            int[] arr = new int[(int) ((maxSize+1)*Math.random())];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = (int) ((maxValue+1)* Math.random() - (maxValue+1)*Math.random());
            }
            return arr;
        }
        public static void printArray(int[] arr) {
            if (arr == null) {
                return;
            }
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+" ");
            }
            System.out.println();
        }
        
        public static void main(String[] args) {        
            int maxSize=10;
            int maxValue=5;
            int[] arr = generateRandomArray(maxSize, maxValue);
            printArray(arr);
            
            int[] res = partition(arr, 0, arr.length-1, arr[arr.length-1]);
            printArray(arr);
            System.out.println(res[0]);
            System.out.println(res[1]);
            
        }
    
    
        
    }
  • 相关阅读:
    [OC] UITabBarController
    ARC forbids explicit message send of release
    ios opensource YiYuanGou
    js添加创建节点和合并节点
    js数组反转
    JQuery中$.ajax()方法参数详解
    js按钮点击展开收起
    window.location.hash属性介绍
    js获取节点
    查询网址字符串参数用数组输出
  • 原文地址:https://www.cnblogs.com/lihuazhu/p/10752685.html
Copyright © 2011-2022 走看看