荷兰国旗问题

问题描述

给定一个整数数组,给定一个值K,这个值在原数组中一定存在,要求把数组中小于K的元素放到数组的左边,大于K的元素放到数组的右边,等于K的元素放到数组的中间

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
* @Description: 荷兰国旗问题
* @Author: libk
* @Github: https://github.com/libk
*/
function nethFlag (arr, num) {
let less = -1
let greater = arr.length
let i = 0

while (i < greater) {
if (arr[i] < num) {
[arr[i], arr[less + 1]] = [arr[less + 1], arr[i]]
i++
less++
} else if (arr[i] === num) {
i++
} else {
[arr[i], arr[greater - 1]] = [arr[greater - 1], arr[i]]
greater--
}
}
return arr
}