当前位置: 首页 > news >正文

Leetcode 2856. Minimum Array Length After Pair Removals

  • Leetcode 2856. Minimum Array Length After Pair Removals
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:2856. Minimum Array Length After Pair Removals

1. 解题思路

这一题思路而言个人觉得还是挺有意思的,因为显然这道题没法直接用greedy的方法进行处理,考察下述两个例子即可:

  1. 1,2,3,3,3
  2. 1,2,2,2,3

因此,问题就在于如何去想一个方式使得构造方式可以最大化。

而我们处理这个的思路就是将其首先按照相同元素进行聚类,然后找到某一个元素e,使其满足:

  1. 严格小于该元素的所有元素的总个数不超过总元素个数的一半;
  2. 严格小于该元素的所有元素的总个数加上上述元素的个数超过总元素个数的一半;

此时,我们可以将所有元素分成三个部分:

  1. 小于元素e的元素总数,记作a
  2. 元素e的元素总数,记作b
  3. 大于元素e的元素总数,记作c

此时我们只需要分类讨论即可:

  1. 如果满足 a + c ≤ b a+c \leq b a+cb,那么可以组成的pair的最大数目一定是 a + c a+c a+c
  2. 如果满足 a + c > b a+c > b a+c>b,那么总可以合理分配元素e用作大数和小数的方式,使得所有的数字应消尽消,此时所有的数字最多剩下一个,取决于总元数个数的奇偶性。

2. 代码实现

给出python代码实现如下:

class Solution:def minLengthAfterRemovals(self, nums: List[int]) -> int:n = len(nums)cnt = sorted(Counter(nums).items())s = 0for k, v in cnt:if s + v < n / 2:s += vcontinuer = n - s - vif s + r <= v:return v - s - relse:return n % 2

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

http://www.lryc.cn/news/169309.html

相关文章:

  • 深入了解Vue.js框架:构建现代化的用户界面
  • 力扣 -- 673. 最长递增子序列的个数
  • 43.248.189.X网站提示风险,存在黑客攻击页面被篡改,改如何解决呢?
  • Java8中判断一个对象不为空存在一个类对象是哪个
  • 项目:点餐系统
  • ElasticSearch 5.6.3 自定义封装API接口
  • 企业架构LNMP学习笔记51
  • rom修改----安卓系列机型如何内置app 如何选择so文件内置
  • SpringMvc中的请求转发和重定向
  • Oracle,高斯创建自增序列
  • 操作系统学习笔记-精简复习版
  • 系统架构:软件工程速成
  • VUE之proxy配置实现跨域
  • AI与医疗保健:革命性技术如何拯救生命
  • Spring Boot + Vue3前后端分离实战wiki知识库系统<十三>--单点登录开发二
  • 基于Java的高校科研信息管理系统设计与实现(亮点:完整严谨的科研项目审批流程、多文件上传、多角色)
  • 【uniapp】Dcloud的uni手机号一键登录,具体实现及踩过的坑,调用uniCloud.getPhoneNumber(),uni.login()等
  • Qt Quick Layouts Overview
  • 星臾计划 | 第六期优秀实习生访谈合集
  • 《数字图像处理-OpenCV/Python》连载(7)视频文件的读取与保存
  • 安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR显示CPU过载,该如何解决?
  • 如何彻底卸载mysql
  • 【深度学习实验】线性模型(二):使用NumPy实现线性模型:梯度下降法
  • 带你熟练使用list
  • 排序——希尔排序
  • 为什么文件夹里的文件看不到?了解原因及应对措施
  • KVM嵌套虚拟化实现
  • 驱动开发,IO模型,信号驱动IO实现过程
  • 左神高级进阶班3(TreeMap顺序表记录线性数据的使用, 滑动窗口的使用,前缀和记录结构, 可能性的舍弃)
  • Linux线程