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


    /**
    * 荷兰国旗划分
    * <p>
    * 给定一个数组和一个整数num,请把小于num的数放在数组的左边,把等于num的数放在数组的中间,把大于num的数放在数组的右边(不要求整体有序)
    */
    public class NetherlandFlag {

    /**
    * 荷兰国旗划分 以arr[right] 为划分值
    *
    * @param arr 数组
    * @param left 左边界
    * @param right 右边界
    * @return 等于区域的下标范围
    */
    public static int[] netherlandFlag(int[] arr, int left, int right) {
    if (left > right) {
    return new int[]{-1, -1};
    }
    if (left == right) {
    return new int[]{left, right};
    }
    int less = left - 1;
    int more = right;
    int index = left;
    while (index < more) {
    if (arr[index] < arr[right]) {
    swap(arr, index++, ++less);
    } else if (arr[index] > arr[right]) {
    swap(arr, index, --more);
    } else {
    index++;
    }
    }
    swap(arr, more, right);
    return new int[]{less + 1, more};
    }

    /**
    * 交换数组两个元素的位置
    *
    * @param arr 数组
    * @param i 位置
    * @param j 位置
    */
    private static void swap(int[] arr, int i, int j) {
    // 同一个位置交换无意义,并且用异或交换会有问题
    if (i == j) {
    return;
    }
    // 交换
    arr[i] = arr[i] ^ arr[j];
    arr[j] = arr[i] ^ arr[j];
    arr[i] = arr[i] ^ arr[j];
    }

    }

    /* 如有错误,欢迎批评指正 */
  • 相关阅读:
    字符串数组和字符串的转换
    项目总结3
    解决几种中文乱码的问题
    ipms的sql语句
    ipms综合管理系统的总结2
    ipms综合管理系统的总结
    简答题汇总
    log4net根据日志类型写入到不同的文件中
    NUnit单元测试初试
    log4net
  • 原文地址:https://www.cnblogs.com/laydown/p/12813644.html
Copyright © 2011-2022 走看看