博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
荷兰国旗问题
阅读量:5304 次
发布时间:2019-06-14

本文共 1205 字,大约阅读时间需要 4 分钟。

package Test01;/* * (荷兰国旗问题) * 给定一个数组arr,和一个数num,请把小于num的数放在数组的 左边,等于num的数放在数组的中间,大于num的数放在数组的 右边。 * 要求额外空间复杂度O(1),时间复杂度O(N) */public class NtherlandsFlag {    public static void main(String[] args) {        int[] arr = { 1, 3, 2, 9, 8, 7, 1, 0, 7, 3, 3, 4, 5, 3 }; // 要排序的数组        int[] test = partition(arr, 0, arr.length - 1, 7); // L,左边界,R,右边界,P,给定的num大小        for (int i = 0; i < arr.length; i++) { // 打印            System.out.print(arr[i] + "  ");        }        System.out.println("\n" + test[0] + "  " + test[1]); //打印等于num的开始和结束下标    }    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) {                            //一定要是else if                swap(arr, L++, ++less);            }            else if (arr[L] > num) {                swap(arr, L, --more);            } else {                L++;            }        }        return new int[] { less + 1, more - 1 };    }    public static void swap(int[] arr,int a,int b) {           //交换        int temp = arr[a];        arr[a] = arr[b];        arr[b] = temp;    }}

转载于:https://www.cnblogs.com/superfly123/p/10529454.html

你可能感兴趣的文章
cv2读取图像
查看>>
于丹心语-人生没有弯路可言
查看>>
poj 3279
查看>>
安装SSH、配置SSH无密码登录 ssh localhost
查看>>
动态代理模式
查看>>
RakNet手册翻译(1)-System OverView
查看>>
网络流23题
查看>>
CF954I Yet Another String Matching Problem 并查集、FFT
查看>>
linux命令
查看>>
pygal and matplotlib(again)
查看>>
Linux从入门到精通——系统无法启动可能的情况及排错方法
查看>>
Redis 从数据库配置
查看>>
JavaScript 基础
查看>>
分布式实现技术总结
查看>>
BlackBerry Localization sample (1)
查看>>
Remainder
查看>>
Android:pressed状态下,改变背景和Text样式
查看>>
Spring层次图
查看>>
Unity3D学习笔记(三十一):Xlua(1)
查看>>
第一个C程序 (Blog测试)
查看>>