衢州不锈钢保温工程 2026-01-24: 数组元素分组。用go说话, 给定个整数数组 nums 和

 97     |      2026-01-26 07:08:35
铁皮保温

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.com

k := 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助力您的异日发展。

相关词条:储罐保温
异型材设备
钢绞线厂家玻璃丝棉厂家