
2026-01-24:数组元素分组。用go说话,给定个整数数组 nums 和个整数 k,判断能否把数组里的通盘元素辞别红些许个大小为 k 的子集,要求每个子集里面莫得重迭值,而况数组中的每个元素只可出目下个子集聚。若存在得志这些要求的辞别案则复返 true衢州不锈钢保温工程,不然复返 false。
1
1
1
输入: nums = [1,2,3,4], k = 2。
输出: true。
解释:
种可能的分组式是分红 2 组:
组 1:[1, 2]
组 2:[3, 4]
每个组包含 k = 2 个不同的元素,而况通盘元素王人被碰劲使用次。
题目来独力扣3659。
进程风景
1. 搜检数组长度是否能被 k 整除
先判断数组长度 n 是否能被 k 整除。
要是 n k != 0,则不能能辞别红些许个大小为 k 的子集,径直复返 false。
2. 统计每个数字的出现次数
创建个计数数组 cnt,长度是 nums 中的大值加 1(为了用下标径直映射数字)。
遍历数组 nums,对每个数字 x,加多 cnt[x] 的计数。
3. 搜检某个数字出现次数是否过多
在遍历并统计的进程中,关于每个 x,要是 cnt[x] 大于 n/k,则坐窝复返 false。
这是因为:
• 共要分红 n/k 组,每组 k 个不同的数字。
• 要是某个数字出现的次数大于组数 n/k,设备保温施工那么然至少有组会出现两次这个数字,违背“每组里面重迭值”的要求。
4. 复返能
要是前边莫得复返 false,则复返 true。
提防:这里代码莫得超过考据是否存在具体的分组案,只作念了要要求的判断。
关于本题的不断要求(数字规模有限衢州不锈钢保温工程,且出现次数不外 n/k),数学上不错解释然存在种分组案,因此代码只需作念上述搜检即可。
工夫复杂度分析
• 遍历数组统计大值:O(n)。
• 创建计数数组并运行化(Go 中会自动值运行化):O(M),其中 M = max(nums) + 1。
• 遍历数组统计频次并搜检 cnt[x] > n/k:O(n)。
总工夫复杂度:O(n + M),其中 M 是数组中大元素的值加 1(大 100001)。
稀奇空间复杂度分析
• 主要稀奇空间是计数数组 cnt,大小为 M = max(nums) + 1。
是以稀奇空间复杂度:O(M),其中 M ≤ 100001。
Go无缺代码如下:
package main
import (
"fmt"
"slices"
)
func partitionArray(nums []int, k int)bool {
n := len(nums)
if nk > 0 {
returnfalse
}
cnt := make([]int, slices.Max(nums)+1)
for _, x := range nums {
cnt[x]++
if cnt[x] > n/k {
returnfalse
}
}
returntrue衢州不锈钢保温工程
}
func main {
nums := []int{1, 2, 3, 4}
邮箱:215114768@qq.comk := 2
result := partitionArray(nums, k)
fmt.Println(result)
}
Python无缺代码如下:
# -*-coding:utf-8-*-
def partitionArray(nums, k):
n = len(nums)
if n k > 0:
return False
max_val = max(nums)
cnt = [0] * (max_val + 1)
for x in nums:
cnt[x] += 1
if cnt[x] > n // k:
return False
return True
# 测试用例
nums = [1, 2, 3, 4]
k = 2
result = partitionArray(nums, k)
print(result)
C++无缺代码如下:
#include
#include
#include
bool partitionArray(std::vector& nums, int k) {
int n = nums.size;
if (n k > 0) {
returnfalse;
}
int maxVal = *std::max_element(nums.begin, nums.end);
std::vector cnt(maxVal + 1, 0);
for (int x : nums) {
cnt[x]++;
if (cnt[x] > n / k) {
returnfalse;
}
}
returntrue;
}
int main {
std::vector nums = {1, 2, 3, 4};
int k = 2;
bool result = partitionArray(nums, k);
std::cout
return0;
}
咱们坚信东说念主工智能为等闲东说念主提供了种“增强用具”,并勤劳于于共享全位的AI常识。在这里,您不错找到新的AI科普著述、用具评测、晋升率的隐私以及行业知悉。
迎接热心“福大大架构师逐日题”衢州不锈钢保温工程,发音书可赢得口试府上,让AI助力您的异日发展。
相关词条:储罐保温异型材设备
钢绞线厂家玻璃丝棉厂家
