给你一个整数数组 nums 和一个整数 k ,请你返回 nums 中 好 子数组的数目。
一个子数组 arr 如果有 至少 k 对下标 (i, j) 满足 i < j 且 arr[i] == arr[j] ,那么称它是一个 好 子数组。
子数组 是原数组中一段连续 非空 的元素序列。
https://leetcode.cn/problems/rearrange-array-elements-by-sign/description/
- 队列:数组 或 链表
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
*/
package com.huawei.prac;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;
public class Solution7th {
public static void main(String[] args) {
int[] nums = {3, 1, -2, -5, 2, -4};
System.out.println(Arrays.toString(rearrangeArray(nums))); // [3,-2,1,-5,2,-4]
System.out.println(Arrays.toString(rearrangeArray(new int[] {1, -1})));
}
/**
* 2149. 按符号重排数组[集合基础]
*
* @param nums 整数数组,数目相等的正整数和负整数组成
* @return 重排后数组
*/
public static int[] rearrangeArray(int[] nums) {
int[] resArr = new int[nums.length];
Queue<Integer> posQue = new ArrayDeque<>();
Queue<Integer> negQue = new ArrayDeque<>();
// 保持顺序拆分数组nums
for (int num : nums) {
if (num >= 0) {
posQue.offer(num);
} else {
negQue.offer(num);
}
}
int index = 0;
while (!posQue.isEmpty() || !negQue.isEmpty()) {
resArr[index++] = posQue.poll();
resArr[index++] = negQue.poll();
}
return resArr;
}
}