首页 > 其他分享 >Problem: 1338. 数组大小减半 贪心 模拟 法 简单易懂

Problem: 1338. 数组大小减半 贪心 模拟 法 简单易懂

时间:2024-12-15 13:27:06浏览次数:5  
标签:arr 1338 int 复杂度 ans 易懂 Problem total target

Problem: 1338. 数组大小减半
在这里插入图片描述

思路

因为要选择最小的整数集合,这里用Counter容器来统计下所有各种数字的大小,然后按照值来排序,设置target来表示要到达什么位置,这里最好不要用整除,防止要计算的大于arr,但是len(arr)是奇数,这里total表示删除到这个位置已经删除了多少数字,如果大于等于target就是可以break,然后ans记录当前已经删了多少,就是贪心从最多的开始删除。

复杂度

时间复杂度: O(n)

空间复杂度: O(n)

class Solution:
def minSetSize(self, arr: List[int]) -> int:
count=Counter(arr)

    fre=sorted(count.values(),reverse=True)

    target=len(arr)/2
    total=0
    ans=0
    for i in fre:
        total+=i
        ans+=1
        if total>=target:
            break
    return ans

标签:arr,1338,int,复杂度,ans,易懂,Problem,total,target
From: https://blog.csdn.net/qq_17405059/article/details/144485829

相关文章

  • Java代码执行流程(简易易懂版)上部
    很多同学刚开始学java时看懂了怎么用,却不知道他内存怎么运行的过程,所以会感觉很迷茫,感觉白学了,我也和大家一样,这里我用了三天的时间给大家整理了代码执行时的过程,并且注意的一些事项,如果有不对的地方请大家指出,我在改正我们先定义一个A类在main函数创建A类的对象实例我们来......
  • 单ubuntu22.04系统工作台降级版本重装ubuntu20.04(全网最详细-简单易懂)
        由于前段时间在配置开源框架时候,官方支持18.04或者20.04,但是本人ubuntu系统是22.04,故运行中问题层出,故想着重装一下系统,把版本降到常用的20.04(推荐),在网上找相关单ubuntu系统重装的内容的时候,发现类似的完整过程居然没有,大多数都是关于Windows双系统的安装,所以笔者决......
  • 什么是时钟分频(初学- 通俗易懂版 + 官方版本)
    通俗版什么是时钟分频?        想象一下,你有一个非常快的节拍器(我们叫它主时钟),它每秒钟发出很多次“滴答”声。但是,有时候你需要一个慢一点的节拍来完成某些任务,比如做手工或者跳舞。这时,你可以选择只听每隔几个“滴答”声才做出一次动作。这就是时钟分频的基本概念:从......
  • docker常用命令的使用(超详细通俗易懂小白上手)
    1.Docker是一个开源的平台,用于开发、打包和运行应用程序。它通过容器技术将应用程序及其依赖打包在一起,确保在任何环境中都能一致地运行。Docker提供了轻量级、可移植和高效的方式来管理应用程序的生命周期,使得开发、测试和部署更加便捷和快速。2.镜像命令2.1docker拉取ng......
  • 网站底部的内容修改方法,简单易懂
    如果您需要修改网站底部的内容,可以按照以下步骤进行操作:登录后台管理:使用您的账户信息登录网站的后台管理系统。导航至底部设置:登录后,导航至“底部设置”、“页脚设置”或“页面管理”等相关页面。这些页面通常会包含底部内容的编辑功能。编辑底部内容:在相应的页面中,找到......
  • Mod segma problem
    https://atcoder.jp/contests/abc378/tasks/abc378_e#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definelowbit(x)(x&(-x))#definepiipair<int,int>#definemkpmake_pairconstintN=2e5+10,mod=998244353;i......
  • Google Kickstart2022 Round G Problem C 快乐子数组
    有点思路,但还需要细想思路一眼上去,应该是写单调队列,但是不是像写滑动窗口一样写设前缀和为pre,如果一个区间\([l,r]\)满足条件,那么\(pre[l-1]<min(pre[l],pre[l+1],.....,pre[r]\)根据这一点,我们每次枚举到i,只需要统计左端有多少个相对应的j使得pre[j]<pre[i]即可,这时就可以......
  • #P1601 A+B Problem(高精)
    P1601A+BProblem(高精)题目描述高精度加法,相当于a+bproblem,不用考虑负数。输入格式分两行输入。a,b≤1......
  • CF868F Yet Another Minimization Problem (四边形不等式 trick)
    题意:给定序列,把序列分成\(k\)段,使每一段相同元素对数之和最小。\(n\le10^5,k\le20,a_i\len\)。容易写出转移方程:\(dp[i][j]=\min_{k=1}^{i}(dp[k-1][j-1]+w(k,i))\),其中\(w(k,i)\)表示\(a_k\sima_i\)的相同元素对数。第一想法是wqs二分,然后发现\(w(k,i)\)实在太......
  • Google Kickstart2022 Round H Problem B 魔法百合井
    很好的一道dp题传送门思考通过几次尝试,你会发现贪心貌似不可用贪心的思路,只统计目前已有的百合花,然后相加,你会发现,会留下一定数量的百合花,小于统计值,只能一个一个加,反而导致总硬币更多尝试dp怎么得到答案设f[x]是得到x朵花的最小硬币数我们先不考虑f[x]怎么得到考虑怎......