荷兰国旗问题:Dutch National Flag Problem
a、给定一个序列arr,和一个数字num,把 > num的放在数组右边,把 <= num的放在数组左边
b、给定一个序列arr,和一个数字num,把>num的放在数组右边,把 < num的放在数组左边,等于的放在数组中间
a,b题目的要求:额外空间复杂度O(1),时间复杂度O(N)
思路:
题目a思路:对应leftRightPart()方法
当arr[k] <= num:假定有一个<=的区域(用left = -1代表 <= num的初始区域),k指向当前的值(k从0开始),如果arr[k] <= num,交换当前指向的值与 <= 区域下一位的值,left ++(让<=这个区域往数组右边推移),让k ++,交换的目的是为了让小的值纳入到<=的区域内,这个区域内的经过上述操作后就都是 <= num的值。
当arr[k] > num:这时候直接k ++ÿ