第十五题:荷兰国旗问题(java)
2019-01-14 19:30
211 查看
版权声明:Please make the source marked https://blog.csdn.net/qq_31807385/article/details/86482322
题目要求:
给定一个数组,将这个数组,按照num划分,小于num的元素放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求时间复杂度是O(N),额外空间复杂度是O(1)
代码实现:
[code]package com.isea.brush; /** * 荷兰国旗问题: * 解题思路:使用两个变量(指针),less 和more,less表示小于num的范围,more表示的是大于num的范围 * 起始值分别为-1,和R+1,如果当前元素比num大,那么和more的前一个位置交换位置,交换之后,继续和num比较 * 如果比当前元素要小,和less的后一个位置交换,而且当前位置需要向下移动 */ public class NetherlandsFlag { /** * 求在arr的L~R范围内的荷兰国旗问题 * @param arr * @param L * @param R * @param num * @return 返回等于num位置的起始和终点的位置 */ public static int[] solution(int[] arr,int L, int R , int num){ int less = -1; int more = R + 1; while(L < more){ // 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}; } public static void swap(int[] arr,int i ,int j){ arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; } }
相关文章推荐
- 第二十题:链表的荷兰国旗问题(Java)
- 算法笔记_051:荷兰国旗问题(Java)
- 荷兰国旗问题java
- 荷兰国旗问题
- 荷兰国旗问题
- nyoj 荷兰国旗问题
- 【算法习作】荷兰国旗问题
- LeetCode | Sort Colors(荷兰国旗问题)
- 荷兰国旗问题
- 【python】LeetCode | Sort Colors(荷兰国旗问题)
- 荷兰国旗问题--快速排序的变种
- 荷兰国旗问题
- 荷兰国旗问题
- 荷兰国旗问题
- 荷兰国旗问题(三元素数组排序问题)
- 排序相关——荷兰国旗问题
- 算法系列--荷兰国旗问题
- 算法初级02——荷兰国旗问题、随机快速排序、堆排序
- 荷兰国旗问题--快速排序的变种
- 荷兰国旗问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=268