2025-06-01:执行操作后元素的最高频率Ⅰ 用go语言,给定一个整

B站影视 港台电影 2025-06-01 14:33 1

摘要:排序数组:将 nums 排序,以便后续的滑动窗口处理。2.初始化指针和变量:使用 left、right 指针表示滑动窗口的左右边界,cnt 用于统计当前窗口内相同元素的连续出现次数。3.滑动窗口扩展:• 对于每个元素 nums[i],尝试扩展窗口的右边界 ri

2025-06-01:执行操作后元素的最高频率Ⅰ。用go语言,给定一个整数数组 nums 和两个整数 k 以及 numOperations。

你需要对数组 nums 进行恰好 numOperations 次操作。每次操作的步骤如下:

• 选择一个之前没有选择过的下标 i。• 将 nums[i] 增加一个在区间 [-k, k] 内的任意整数。

完成所有操作后,计算数组中出现次数最多的元素出现的频率,并返回这个最大频率。

1

1

0

0

输入:nums = [5,11,20,20], k = 5, numOperations = 1。

输出:2。

解释:

通过以下操作得到最高频率 2 :

将 nums[1] 增加 0 。

题目来自力扣3346。

1. 排序数组:将 nums 排序,以便后续的滑动窗口处理。2. 初始化指针和变量:使用 left、right 指针表示滑动窗口的左右边界,cnt 用于统计当前窗口内相同元素的连续出现次数。3. 滑动窗口扩展:• 对于每个元素 nums[i],尝试扩展窗口的右边界 right,使得窗口内的所有元素可以通过最多 numOperations 次操作调整到 nums[i]。• 计算将窗口内所有元素调整到 nums[i] 所需的总操作次数。这可以通过前缀和或累加的方式计算。• 如果总操作次数超过 numOperations,则移动左边界 left 以减少操作次数。• 更新最大频率 ans。4. 处理连续相同元素:如果当前元素与下一个元素相同,直接跳过,因为它们已经可以贡献频率。5. 考虑操作限制:由于最多只能进行 numOperations 次操作,因此最大频率不能超过 numOperations + 1(即最多调整 numOperations 个元素到某个值,加上该值本身可能已经存在)。• 时间复杂度:• 排序:O(n log n),其中 n 是 nums 的长度。• 滑动窗口:每个元素最多被访问两次(left 和 right 指针各一次),因此是 O(n)。• 总时间复杂度:O(n log n)(排序主导)。• 空间复杂度:• 排序可能需要 O(log n) 的栈空间(取决于排序算法)。• 其他变量是常数空间。• 总空间复杂度:O(log n)。package mainimport ( "fmt" "slices")func maxFrequency(nums int, k, numOperations int) (ans int) { slices.Sort(nums) n := len(nums) var cnt, left, right, left2 int for i, x := range nums { for nums[left2]

.

# -*-coding:utf-8-*-from bisect import bisect_left, bisect_rightdef maxFrequency(nums, k, numOperations):nums.sortn = len(nums)ans = 0cnt = 0left = 0right = 0left2 = 0for i, x in enumerate(nums):while left2

我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。

·

来源:菠萝蜜的原创科学课堂

相关推荐