网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

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

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

  • • 选择一个之前没有选择过的下标 i。

  • • 将 nums[i] 增加一个在区间 [-k, k] 内的任意整数。

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

1 <= nums.length <= 100000。

1 <= nums[i] <= 100000。

0 <= k <= 100000。

0 <= numOperations <= nums.length。

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

输出:2。

解释:

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

将 nums[1] 增加 0 。

题目来自力扣3346。

关键观察:

  1. 1.排序:首先将数组排序,这样我们可以更容易地计算某个区间内的元素是否可以通过操作调整到同一个值。

  2. 2.滑动窗口:使用滑动窗口的思想来找到最长的子数组,其中所有元素可以通过最多numOperations次操作调整到同一个值。

  3. 3.操作分配:对于窗口内的元素,我们需要计算将它们调整到某个目标值(通常是窗口的右端或左端)所需的总操作次数,并确保这个总操作次数不超过numOperations的限制。

具体步骤:
  1. 1.排序数组:将nums排序,以便后续的滑动窗口处理。

  2. 2.初始化指针和变量:使用leftright指针表示滑动窗口的左右边界,cnt用于统计当前窗口内相同元素的连续出现次数。

  3. 3.滑动窗口扩展

  • • 对于每个元素nums[i],尝试扩展窗口的右边界right,使得窗口内的所有元素可以通过最多numOperations次操作调整到nums[i]

  • • 计算将窗口内所有元素调整到nums[i]所需的总操作次数。这可以通过前缀和或累加的方式计算。

  • • 如果总操作次数超过numOperations,则移动左边界left以减少操作次数。

  • • 更新最大频率ans

4.处理连续相同元素:如果当前元素与下一个元素相同,直接跳过,因为它们已经可以贡献频率。

5.考虑操作限制:由于最多只能进行numOperations次操作,因此最大频率不能超过numOperations + 1(即最多调整numOperations个元素到某个值,加上该值本身可能已经存在)。

时间复杂度和空间复杂度

  • 时间复杂度

    • • 排序:O(n log n),其中nnums的长度。

    • • 滑动窗口:每个元素最多被访问两次(leftright指针各一次),因此是O(n)

    • • 总时间复杂度:O(n log n)(排序主导)。

  • 空间复杂度

    • • 排序可能需要O(log n)的栈空间(取决于排序算法)。

    • • 其他变量是常数空间。

    • • 总空间复杂度:O(log n)

Go完整代码如下:

package main import (     "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] < x-k*2 {             left2++         }         ans = max(ans, min(i-left2+1, numOperations))         cnt++         // 循环直到连续相同段的末尾,这样可以统计出 x 的出现次数         if i < n-1 && x == nums[i+1] {             continue         }         for nums[left] < x-k {             left++         }         for right < n && nums[right] <= x+k {             right++         }         ans = max(ans, min(right-left, cnt+numOperations))         cnt = 0     }     return } func main() {     nums := []int{5,11,20,20}     k := 5     numOperations := 1     result := maxFrequency(nums,k,numOperations)     fmt.Println(result) }

Python完整代码如下:

# -*-coding:utf-8-*- from bisect import bisect_left, bisect_right defmaxFrequency(nums, k, numOperations):     nums.sort()     n = len(nums)     ans = 0     cnt = 0     left = 0     right = 0     left2 = 0          for i, x inenumerate(nums):         while left2 < n and nums[left2] < x - 2 * k:             left2 += 1         ans = max(ans, min(i - left2 + 1, numOperations))                  cnt += 1         if i < n - 1and x == nums[i + 1]:             continue                  while left < n and nums[left] < x - k:             left += 1         while right < n and nums[right] <= x + k:             right += 1                  ans = max(ans, min(right - left, cnt + numOperations))         cnt = 0              return ans if __name__ == "__main__":     nums = [5, 11, 20, 20]     k = 5     numOperations = 1     result = maxFrequency(nums, k, numOperations)     print(result)

我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。 欢迎关注“福大大架构师每日一题”,让 Go 语言和算法助力您的职业发展

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
隔壁夫妻天天蹭我充电桩,我怒断电源出国游,3天后物业打来电话

隔壁夫妻天天蹭我充电桩,我怒断电源出国游,3天后物业打来电话

清茶浅谈
2025-09-11 21:10:19
刚刚发布!内蒙古多地齐发冰雹预警

刚刚发布!内蒙古多地齐发冰雹预警

鲁中晨报
2025-09-15 10:19:02
老杜出狱大结局?逮捕他的警察长,连夜出大事,阿基诺家族已参战

老杜出狱大结局?逮捕他的警察长,连夜出大事,阿基诺家族已参战

卷史
2025-09-04 10:49:39
刚刚!中美经贸,大消息

刚刚!中美经贸,大消息

中国基金报
2025-09-14 20:49:56
这一次,美国装不下去了,特朗普也装不下去了

这一次,美国装不下去了,特朗普也装不下去了

谭浩俊
2025-09-15 09:20:16
横店20万群演现状:美女泛滥成灾,光棍懒汉遍地,他们该何去何从

横店20万群演现状:美女泛滥成灾,光棍懒汉遍地,他们该何去何从

甜柠聊史
2025-08-18 08:00:54
触碰红线,国乒名将或遭重罚,原因曝光,王励勤抉择引关注!

触碰红线,国乒名将或遭重罚,原因曝光,王励勤抉择引关注!

体育见习官
2025-09-14 17:03:01
柯文哲再抛联合政府!蓝委:可合作

柯文哲再抛联合政府!蓝委:可合作

新时光点滴
2025-09-15 05:36:53
张颂文和厚唇女的恩怨纠葛瓜

张颂文和厚唇女的恩怨纠葛瓜

热闹吃瓜大姐
2025-09-14 19:51:32
俄战略专家警告:若美军执意与中国开战,一周内兵力损失超十万人

俄战略专家警告:若美军执意与中国开战,一周内兵力损失超十万人

通文知史
2025-09-14 08:30:08
西贝开始给罗永浩泼脏水了

西贝开始给罗永浩泼脏水了

亮见
2025-09-12 14:05:39
王晶曝新消息,古天乐低调在美国完婚,网友:年纪大结婚很正常

王晶曝新消息,古天乐低调在美国完婚,网友:年纪大结婚很正常

阿废冷眼观察所
2025-09-14 12:59:27
曼联球迷怒批谢什科:全场消失,巨额投入又打水漂了

曼联球迷怒批谢什科:全场消失,巨额投入又打水漂了

雷速体育
2025-09-15 08:47:10
王菲担忧的事情终究发生,李亚鹏再曝丑闻,难怪频繁接近李嫣

王菲担忧的事情终究发生,李亚鹏再曝丑闻,难怪频繁接近李嫣

176翠翠
2025-09-14 12:30:43
灾难级公关!西贝后厨里的鸡汤、西兰花都是冷冻,这波口碑全输了

灾难级公关!西贝后厨里的鸡汤、西兰花都是冷冻,这波口碑全输了

热点菌本君
2025-09-12 21:08:04
乌克兰空袭新战术,俄罗斯难以应对:巨资回购土耳其S-400?

乌克兰空袭新战术,俄罗斯难以应对:巨资回购土耳其S-400?

鹰眼Defence
2025-09-14 16:50:48
尼泊尔今天的局面,是“制度错配”的必然产物

尼泊尔今天的局面,是“制度错配”的必然产物

观察者网
2025-09-13 09:45:05
公积金,变香了,但也被惦记上了!

公积金,变香了,但也被惦记上了!

言叔财经视角
2025-09-14 10:29:51
招商银行信用卡,也涨不动了

招商银行信用卡,也涨不动了

财天COVER
2025-09-14 22:50:24
以色列空袭卡塔尔打醒美媒!美国这样下去迟早会被以色列玩死

以色列空袭卡塔尔打醒美媒!美国这样下去迟早会被以色列玩死

星辰大海路上的种花家
2025-09-14 08:38:25
2025-09-15 10:43:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
964文章数 39关注度
往期回顾 全部

科技要闻

发布会再提乔布斯,苹果高调回归设计初心

头条要闻

杭州部分西贝门店客流量骤减 女子:人这么空 第一次见

头条要闻

杭州部分西贝门店客流量骤减 女子:人这么空 第一次见

体育要闻

施罗德成双料MVP激动落泪 全队浇水庆生

娱乐要闻

知名男演员官宣三胎

财经要闻

“预制菜大战”100小时

汽车要闻

混动狂潮 835马力V12 阿斯顿·马丁的最后浪漫

态度原创

家居
数码
亲子
旅游
公开课

家居要闻

原木风格 温馨舒适氛围

数码要闻

七彩虹上线首款英特尔 H810 主板 BATTLE-AX H810M-A WIFI V20

亲子要闻

这不就是成功支付吗~

旅游要闻

热闻|清明假期将至,热门目的地有哪些?

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版