LeetCode 每日一题 2025/12/22-2025/12/28

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • [12/22 960. 删列造序 III](#12/22 960. 删列造序 III)
      • [12/23 2054. 两个最好的不重叠活动](#12/23 2054. 两个最好的不重叠活动)
      • [12/24 3074. 重新分装苹果](#12/24 3074. 重新分装苹果)
      • [12/25 3075. 幸福值最大化的选择方案](#12/25 3075. 幸福值最大化的选择方案)
      • [12/26 2483. 商店的最少代价](#12/26 2483. 商店的最少代价)
      • [12/27 2402. 会议室 III](#12/27 2402. 会议室 III)
      • 12/28

12/22 960. 删列造序 III

dp求最多能保留的列数

python 复制代码
def minDeletionSize(strs):
    """
    :type strs: List[str]
    :rtype: int
    """
    n=len(strs[0])
    dp=[1]*n
    for i in range(n-2,-1,-1):
        for j in range(i+1,n):
            if all(row[i]<=row[j] for row in strs):
                dp[i] = max(dp[i],1+dp[j])
    return n-max(dp)
        

12/23 2054. 两个最好的不重叠活动

将活动结束时间从小到大排序

递增栈保留当前活动结束前的活动(结束时间,价值)

python 复制代码
def maxTwoEvents(events):
    """
    :type events: List[List[int]]
    :rtype: int
    """
    import bisect
    events.sort(key=lambda x:x[1])
    ans=0
    st=[(0,0)]
    for s,e,v in events:
        i = bisect.bisect_left(st, (s,))-1
        ans = max(ans,st[i][1]+v)
        if v>st[-1][1]:
            st.append((e,v))
    return ans

12/24 3074. 重新分装苹果

根据苹果总数 按照箱子从大到小选择

python 复制代码
def minimumBoxes(apple, capacity):
    """
    :type apple: List[int]
    :type capacity: List[int]
    :rtype: int
    """
    s = sum(apple)
    capacity.sort(reverse=True)
    i=0
    while s>0 and i<len(capacity):
        s-=capacity[i]
        i+=1
    return i

12/25 3075. 幸福值最大化的选择方案

从大到小选择

python 复制代码
def maximumHappinessSum(happiness, k):
    """
    :type happiness: List[int]
    :type k: int
    :rtype: int
    """
    happiness.sort(reverse=True)
    ans=0
    for i in range(k):
        v = happiness[i]-i
        if v<=0:
            break
        ans += v
    return ans

12/26 2483. 商店的最少代价

关门前N的个数和关门后Y的个数

先统计Y的个数 从头遍历

cur为当前最低代价

python 复制代码
def bestClosingTime(customers):
    """
    :type customers: str
    :rtype: int
    """
    y,n=0,0
    for c in customers:
        if c=='Y':
            y+=1
    ans = 0
    cur = y
    
    for i,c in enumerate(customers):
        if c=='Y':
            y-=1
        else:
            n+=1
        if cur>y+n:
            cur=y+n
            ans = i+1
    return ans

12/27 2402. 会议室 III

最小堆ava,used分别存储当前可用和正在使用的会议室

将会议排序

依次遍历

当前会议[s,e) 当前时间需要调到s,

将s前结束的所有使用会议变更为可用

如果此时没有可用会议室 那么需要把当前时间调到 最先用完的会议室结束时间

取出排序最前的可用会议室 记录使用次数

python 复制代码
def mostBooked(n, meetings):
    """
    :type n: int
    :type meetings: List[List[int]]
    :rtype: int
    """
    import heapq
    meetings.sort()
    ava=list(range(n))
    heapq.heapify(ava)
    used=[]
    cnt=[0]*n
    cur=0
    for s,e in meetings:
        cur=max(cur,s)
        while used and used[0][0]<=cur:
            _,r = heapq.heappop(used)
            heapq.heappush(ava, r)
        if not ava:
            cur = used[0][0]
            while used and used[0][0]<=cur:
                _.r = heapq.heappop(used)
                heapq.heappush(ava,r)
        r=heapq.heappop(ava)
        cnt[r]+=1
        heapq.heappush(used,(cur+e-s,r))
    return max(range(n),key=lambda x:cnt[x])

12/28

python 复制代码

相关推荐
NAGNIP1 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP1 天前
一文搞懂激活函数!
算法·面试
董董灿是个攻城狮1 天前
AI 视觉连载7:传统 CV 之高斯滤波实战
算法
爱理财的程序媛1 天前
openclaw 盯盘实践
算法
MobotStone2 天前
Google发布Nano Banana 2:更快更便宜,图片生成能力全面升级
算法
颜酱2 天前
队列练习系列:从基础到进阶的完整实现
javascript·后端·算法
用户5757303346242 天前
两数之和:从 JSON 对象到 Map,大厂面试官到底在考察什么?
算法
程序猿追2 天前
“马”上行动:手把手教你基于灵珠平台打造春节“全能数字管家”
算法
ZPC82102 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人