2024.4.1力扣(1200-1400)刷题记录

news/2024/7/5 11:40:31

一、1475. 商品折扣后的最终价格

1.模拟

class Solution:
    def finalPrices(self, prices: List[int]) -> List[int]:
        # 模拟
        # 时复O(n^2),空复O(1)
        n = len(prices)
        if n == 1:
            return prices
        for i in range(n):
            for j in range(i+1, n):
                if prices[i] >= prices[j]:
                    prices[i] -= prices[j]
                    break
        return prices

2.单调栈。方法来自题解(. - 力扣(LeetCode))和评论(. - 力扣(LeetCode))。

写法1

class Solution:
    def finalPrices(self, prices: List[int]) -> List[int]:
        # 单调栈
        # 栈单调递增(对应的值)
        n = len(prices)
        stack, ans = [0] * n, [0] * n
        top = -1    #栈顶指针
        for i,x in enumerate(prices):
            while top >= 0 and prices[stack[top]] >= x:
                # 非空栈或x小于等于栈顶,出栈
                idx = stack[top]
                ans[idx] = prices[idx] - x
                top -= 1
            top += 1
            stack[top] = i  #将下标入栈   
        while top >= 0:
            idx = stack[top]
            ans[idx] = prices[idx] 
            top -= 1
        return ans 

写法2,来自评论上面评论

class Solution:
    def finalPrices(self, prices: List[int]) -> List[int]:
        # 单调栈2
        stack = []
        for i,x in enumerate(prices):
            while stack and prices[stack[-1]] >= x:
                # 非空栈或x小于等于栈顶,出栈
                prices[stack.pop()] -= x
            stack.append(i)  #将下标入栈   
        # 只改变折扣的,其他的不变
        return prices

二、2656. K 个元素的最大和

贪心+数学

class Solution:
    def maximizeSum(self, nums: List[int], k: int) -> int:
        # 贪心+数学
        # 最大值加k次就行
        return max(nums)*k + (k - 1) * k // 2

三、973. 最接近原点的 K 个点

暴力+排序

class Solution:
    def kClosest(self, points: List[List[int]], k: int) -> List[List[int]]:
        # 暴力+排序
        points.sort(key = lambda x: x[0]**2+x[1]**2)
        return points[:k]

还有一种方法是堆,不会,现在先不写。

四、3042. 统计前后缀下标对 I

暴力

class Solution:
    def countPrefixSuffixPairs(self, words: List[str]) -> int:
        # 暴力
        def isPrefixAndSuffix(str1, str2):
            n1, n2 = len(str1), len(str2)
            if n1 > n2:
                return False
            return str1 == str2[:n1] and str1 == str2[n2-n1:]
        cnt, n = 0, len(words)
        for i in range(n-1):
            for j in range(i+1,n):
                cnt += isPrefixAndSuffix(words[i],words[j])
        return cnt

感谢你看到这里!一起加油吧!


http://lihuaxi.xjx100.cn/news/2139377.html

相关文章

podman和docker 差别

Podman 和 Docker 都是针对容器的开源工具,它们的主要区别在于: 图像构建:Docker 是一个完整的容器解决方案,提供了图像构建、发布、部署等全套流程。而 Podman 只是提供了容器管理的功能,没有图像构建的功能。架构设…

分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测

分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测 目录 分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测分类效果基本介绍模型描述程序设计参考资料…

mysql故障排查

MySQL是目前企业最常见的数据库之一日常维护管理的过程中,会遇到很多故障汇总了常见的故障,MySQL默认配置无法满足高性能要求 一 MySQL逻辑架构图 客户端和连接服务核心服务功能存储擎层数据存储层 二 MySQL单实例常见故障 故障1 ERROR 2002 (HY000)…

【CANoe】CAPL_E2E测试-验证报文中的CRC值是否正确

文章目录 一、背景二、CRC校验算法实现_dll制作三、CAPL脚本编写四、测试结果4.1、Write输出窗口4.2、测试报告截图一、背景 在嵌入式软件开发过程中,对于一些报文,需要实现安全发送与安全接收,这就涉及到CRC和RollingCounter。整车和MCU通讯的报文需要对方进行校验才能正确…

如何重置woocommerce,如何批量删除woocommerce产品

默认情况下当我们在后台删除Woocommerce插件的时候,woocommerce 的数据并不会从数据库中自动清除。 这个时候,为了能清除数据库里的数据,我们可以在wp-config.php 文件里添加如下代码: define( WC_REMOVE_ALL_DATA, true ); 添…

ubuntu20.04执行sudo apt-get update失败的解决方法

参考:执行sudo apt-get update失败的解决方案 1、换源型错误 (1)编辑/etc/apt/sources.list文件 在命令行中输入: sudo vim /etc/apt/sources.list 或者 sudo gedit /etc/apt/sources.list 推荐使用后者 (2&#xf…

基于Java,SpringBoot,Vue和UniApp音乐APP安卓软件设计

摘要 本项目通过结合Java、SpringBoot、Vue和UniApp多种技术栈,设计并实现了一个跨平台的音乐APP。后端服务基于SpringBoot框架构建,利用其快速开发和简便部署的特性,实现了包括用户认证、歌曲管理、播放列表和音乐推荐等核心功能。RESTful …

golang语言系列:SOLID、YAGNI、KISS等设计原则

云原生学习路线导航页(持续更新中) 本文是 golang语言系列 文章,主要对编程通用技能 SOLID、YAGNI、KISS等设计原则 进行学习 1.SOLID设计原则 S:SRP,单一职责原则O:OCP,开闭原则L:…