首页 > 其他分享 >2024/08/27 每日一题

2024/08/27 每日一题

时间:2024-08-27 13:04:21浏览次数:7  
标签:cnt 27 nums int 08 mid 2024 right left

LeetCode 3134 找出唯一性数组的中位数

方法1:二分 + 滑动窗口 + 哈希表

class Solution {
    public int medianOfUniquenessArray(int[] nums) {
        int n = nums.length;
        // 左中位数下标 下标从 1 开始
        long median = ((long) n * (n + 1) / 2 + 1) / 2;
        int left = 1, right = n;
        while (left < right) {
            int mid = (left + right) >> 1;
            if (check(nums, median, mid)) 
                right = mid;
            else 
                left = mid + 1;
        }
        return left;
    }

    public boolean check(int[] nums, long median, int mid) {
        // HashMap 统计不同元素个数 保证其不超过 mid
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        int left = 0; long cnt = 0; // 统计满足添加的区间个数
        for (int right = 0; right < nums.length; right++) {
            map.merge(nums[right], 1, Integer::sum);
            while (map.size() > mid) {
                if (map.merge(nums[left], -1, Integer::sum) == 0)
                    map.remove(nums[left]);
                left++; // 滑动左区间
            }
            // 前面区间已统计 此处只统计以 nums[right] 结尾的子数组
            cnt += right - left + 1;
        }
        return cnt >= median;
    }
}
class Solution:
    def medianOfUniquenessArray(self, nums: List[int]) -> int:
        def check(num: int) -> bool:
            dic = Counter(); left = 0; cnt = 0
            for right, x in enumerate(nums):
                dic[x] += 1
                while len(dic) > num:
                    dic[nums[left]] -= 1
                    if dic[nums[left]] == 0:
                        del dic[nums[left]]
                    left += 1
                cnt += right - left + 1
                if cnt >= medium: # 提前剪枝
                    return True
            return False
        
        n = len(nums)
        medium = (n * (n + 1) // 2 + 1) // 2
        low = 1; high = n
        while low < high:
            mid = (low + high) >> 1
            if check(mid):
                high = mid
            else:
                low = mid + 1
        return low

标签:cnt,27,nums,int,08,mid,2024,right,left
From: https://www.cnblogs.com/XuGui/p/18382497

相关文章

  • 【日记】好热(527 字)
    正文这几天,高温预警一直发。真的好热。中午睡完午觉,上班之前顺路晒了一下被子,一出门,那个温度……不知道是不是室内待得太久了,有些畏光,总觉得地上的阳光非常刺眼。上午特别忙。上周五被柜面主管轰回去的那个客户,今天一早继续来办上周没完成的业务。我感觉柜面主管总有些......
  • 网站提示408 请求超时怎么办
    当网站提示 408请求超时 时,这意味着服务器在等待客户端完成请求的过程中超出了预期的时间限制。这通常发生在客户端与服务器之间的通信延迟过大,或者服务器端处理请求的时间过长的情况下。以下是解决 408请求超时 错误的一些常见方法:常见原因客户端网络问题:客户端与服务器......
  • TPAMI 2024 | FarSeg++:面向高空间分辨率遥感图像中地理空间对象分割的前景感知关系网
    题目:FarSeg++:Foreground-AwareRelationNetworkforGeospatialObjectSegmentationinHighSpatialResolutionRemoteSensingImageryFarSeg++:面向高空间分辨率遥感图像中地理空间对象分割的前景感知关系网络作者:ZhuoZheng;YanfeiZhong;JunjueWang;AilongM......
  • TPAMI 2024 | StyleTalk++:一个统一框架用于控制会说话头像的说话风格
    题目:StyleTalk++:AUnifiedFrameworkforControllingtheSpeakingStylesofTalkingHeadsStyleTalk++:一个统一框架用于控制会说话头像的说话风格作者:S.Wang;Y.Ma;Y.Ding;Z.Hu;C.Fan;T.Lv;Z.Deng;X.Yu摘要个体拥有独特的面部表情和头部姿势风格,这......
  • 亲测好用,吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【2024.09 更新】
    废话不多说,直接分享正文~以下是小编为大家搜集到的最新的ChatGPT国内站,各有优缺点。1、AIPlus(稳定使用)推荐指数:⭐⭐⭐⭐⭐     yixiaai.com该网站已经稳定运营了1年多了。2023年3月份第一批上线的网站。网站支持GPT-3.5、4.0及4o、4omini模型,手机和电脑都能用......
  • springboot社区人员信息管理系统-计算机毕业设计源码62773
    目  录摘要1绪论1.1研究意义1.2课题研究目标1.3论文结构与章节安排2 社区人员信息管理系统分析2.1可行性分析2.2系统业务流程分析2.3 系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4 系统用例分析2.5本章小结3社区人员信息管理系统......
  • PEP 508:为不同版本Python指定不同依赖
    问题背景有些常用的第三方包,在Python中支持的版本是不一致的。例如常用的numpy,在Python3.7中仅支持到1.21版本,其他Python版本可以支持到1.22版本以上,甚至现在的2.0版本以上。有一个问题是,在有些Cython的使用场景中,numpy==1.22的版本有可能出现报错ImportError:numpy.core.multia......
  • C/C++开发神器CLion全新发布v2024.2——更适用于嵌入式开发
    CLion是一款专为开发C及C++所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OSX和Windows上来开发C/C++,同时它还使用智能编辑器来提高代码质量、自动代码重构并且深度整合CMake编译系统,从而提高......
  • Bi-MTDP:通过二值网络加速多任务密集预测,又快又提点 | CVPR 2024
    论文提出二值化多任务密集预测器Bi-MTDP,通过二值神经网络(BNNs)显著加速多任务密集预测模型,同时保持甚至提高模型性能。为了避免信息严重退化而导致二值化带来性能下降,论文引入了深度信息瓶颈层,在前向传播时强制要求下游任务表示满足高斯分布;此外,还引入知识蒸馏机制来纠正反向传播......
  • Origin2024图表中如何直接移除异常点?
    平时我们在使用Origin绘图后,可能会发现有一两个「异常点」,这个时候,我们可能会返回工作表,将异常的数据去除,但可能不知道是哪个数据,因为图和数据有时候不太好对应起来;本期给大家分享做好图之后直接选择移除异常点功能,并且数据表中的数据也会相应的去除,是一个很方便的操作;操作步骤:......