思路:
维护一个最小堆(小顶堆)用来存放元素为0的元素的位置,每次遇到一个不为0的元素,取出堆顶的位置代表的元素与其交换,并将当前位置继续加入最小堆中。
最小堆用Java的 PriorityQueue
实现。默认是值越小,优先级越高,可以初始化放入 cmp
,使得变成最大堆。
java code:
public class Solution {
public void moveZeroes(int[] nums) {
PriorityQueue queue = new PriorityQueue();
for(int i = 0; i < nums.length; ++i) {
if(nums[i] == 0) {
queue.add(i);
}else if(!queue.isEmpty()){
int key = Integer.parseInt(queue.poll().toString());
nums[key] = nums[i];
nums[i] = 0;
queue.add(i);
}
}
}
}