Leetcode 2968. Apply Operations to Maximize Frequency Score

  • Leetcode 2968. Apply Operations to Maximize Frequency Score
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:2968. Apply Operations to Maximize Frequency Score

1. 解题思路

这题说来惭愧,一开始自己没有搞定,不过看了大佬们的解答之后发现多少有点安慰,因为某种意义上来说,感觉也算是个知识点题目,知道了就很快,不知道的话就比较折腾了……

我一开始的思路的话就是滑动窗口,控制左右还有中间的target位置进行单向滑动,从而在 O ( N ) O(N) O(N)的时间复杂度内获得题目的答案。

不过这里的单向滑动的处理方式上没能想明白,主要难点在于中间target位置的选取上,没有想的很明白,无法确定移动方式确保不会出现来回摇摆的情况。

然后,看了大佬们的解答之后发现,这里事实上有一个非常浅显但是重要的结论:

  • 对于任何一组有序数组,永远是取中间值作为目标时可以使得 ∑ i = 1 n ∣ x i − x 0 ∣ \sum\limits_{i=1}^{n}|x_i - x_0| i=1nxix0达到最小值。

这个数学问题的证明事实上也不复杂,移动一个位置考察结果的变化关系即可快速得到结论。

因此,上述问题就只需要考察左右边界的单向滑动,而这个就比较简单了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maxFrequencyScore(self, nums: List[int], k: int) -> int:
        nums = sorted(nums)
        sums = list(accumulate(nums, initial=0))
        ans = 0
        l, r, n = 0, 0, len(nums)
        while l < n:
            while r < n:
                m = (l+r) // 2
                cost = (m-l) * nums[m] - (sums[m]-sums[l]) + (sums[r+1]-sums[m+1]) - (r-m) * nums[m]
                if cost > k:
                    break
                ans = max(ans, r-l+1)
                r += 1
            l += 1
        return ans

提交代码评测得到:耗时971ms,占用内存31.4MB。


http://www.niftyadmin.cn/n/5271327.html

相关文章

Python3 数字(Number) ----20231215

Python3 数字(Number) # Python3 数字(Number)# Python 数字数据类型用于存储数值。 # 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。# 以下实例在变量赋值时 Number 对象将被创建: var1 = 1 var2 = 10# 您也可以使用del语句删除一些数…

GZ015 机器人系统集成应用技术样题5-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题5 选手须知&#xff1a; 本任务书共 24页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

剑指offer A + B

剑指offer A B 题目 输入两个整数&#xff0c;求这两个整数的和是多少。 输入格式 输入两个整数A,B&#xff0c;用空格隔开&#xff0c;0≤A,B≤10的8次幂 输出格式 输出一个整数&#xff0c;表示这两个数的和 样例输入&#xff1a; 3 4样例输出&#xff1a; 7参考答…

鸿蒙开发之用户隐私权限申请

一、简介 鸿蒙开发过程中可用于请求的权限一共有两种&#xff1a;normal和system_basic。以下内容摘自官网&#xff1a; normal权限 normal 权限允许应用访问超出默认规则外的普通系统资源。这些系统资源的开放&#xff08;包括数据和功能&#xff09;对用户隐私以及其他应用带…

创投课程第五期 | 超越比特币:探索BTC生态的无限可能

协会邀请了来自水滴资本&#xff08;Waterdrip Capital&#xff09;的投资总监——Elaine&#xff0c;作为VC创投课程第5期的嘉宾&#xff0c;在北京时间12月17日(周日)晚上21:00 PM-22:00 PM&#xff0c;届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《超越比特币&am…

植物分类-PlantsClassification

一、模型配置 一、backbone resnet50 二、neck GlobalAveragePooling 三、head fc 四、loss type‘LabelSmoothLoss’, label_smooth_val0.1, num_classes30, reduction‘mean’, loss_weight1.0 五、optimizer lr0.1, momentum0.9, type‘SGD’, weight_decay0.0001 六、sche…

数字钟表的设计与实现(java)

概述 本文主要介绍了一个基于Java编程的数字钟表的设计与实现。通过使用Java的Swing库&#xff0c;我们创建了一个简单的图形用户界面&#xff0c;用户可以在其中输入小时、分钟和秒钟的值&#xff0c;并通过点击“设置时间”按钮来更新钟表的显示。同时&#xff0c;我们还添加…

行为树保姆级教程(以机器人的任务规划为例

行为树 目录 什么是行为树(behavior tree)&#xff1f;行为树的相关术语 行为节点和控制节点不同类型的控制结点&#xff1a; 顺序节点选择节点并行节点装饰结点 机器人的例子&#xff1a;物体搜索 1&#xff1a;如果只存在一个地点A&#xff0c;那么行为树很简单&#xff0…