leetcode刷题(轮转数组、买股票的最佳时机、买卖股票的最佳时机2、跳跃游戏、跳跃游戏2、最大子序列交替和、交替数字和、下降路径最小和)

news2024/12/28 20:09:58

目录

1、轮转数组

2、买卖股票的最佳时机

3、买卖股票的最佳时机②

4、跳跃游戏

5、跳跃游戏2

6、最大子序列交替和

7、交替数字和

8、下降路径最小和


1、轮转数组

class Solution():
    def rotate(self, nums, k):
        def reverse(i, j):    #逆置数组
            while i < j:
                nums[i], nums[j] = nums[j], nums[i]
                i += 1
                j -= 1
            return
        n = len(nums)
        k %= n            #必须要取模运算,因为要考虑到k的值有可能比n的值要大
        reverse(0, n-1)   #首先将整个数组逆置
        reverse(0, k-1)   #将左边k个元素逆置
        reverse(k, n-1)   #再将右边n-k个元素逆置
#这样一来就能实现轮转的目标

2、买卖股票的最佳时机

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        minprice = float('inf')
        maxprofit = 0
        for price in prices:   #遍历整个数组
            minprice = min(minprice, price)   #记录下最小价格,因为在遍历后面的元素的时候,肯定是要跟前面的最小的去减的
            maxprofit = max(maxprofit, price - minprice)    #比较我当前已经得到的最大收益和我即将可以算得的最大收益,取最大的
        return maxprofit

3、买卖股票的最佳时机②

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit = 0
        for i in range(1, len(prices)):
            temp = prices[i] - prices[i-1]
            if temp > 0:    #后一项减去前一项,只有temp为正的时候才证明股票是上涨的
                profit += temp
        return profit 

4、跳跃游戏

class Solution:
    def canJump(self, nums: List[int]) -> bool:
            n = len(nums)
            furthest = nums[0]        #一上来最远的可以跨越nums[0]的元素大小的长度
            for i in range(1, n):
                if i > furthest:      #如果下标比能跨越的最大长度要大,直接返回否,因为根本来不了这个下标
                    return False
                if i + nums[i] > furthest:   #在这个位置可以跨越的最大位置比最长能跨越的距离大,则修改最长跨越距离
                    furthest = i + nums[i]
                if furthest >= n-1:      #能跨越的最大距离为整个数组,直接就成了
                    return True
            return furthest >= n-1    #等所有都结束,看能跨越的最长距离是不是整个数组,不是则表明失败

5、跳跃游戏2

class Solution:
    def jump(self, nums: List[int]) -> int:
        #贪心法
        end = 0     #表示当前一步能跳的边界
        max_pos = 0    #表示几种可能里面的最大位置
        steps = 0      #表示跳跃次数
        for i in range(len(nums) - 1):      
            #i表示下标
            max_pos = max(max_pos, nums[i] + i)
            if i == end:
                end = max_pos   #边界到达了最大位置
                steps += 1
        return steps

6、最大子序列交替和

#2023.7.11
class Solution:
    def maxAlternatingSum(self, nums: List[int]) -> int:
        n = len(nums)
        f = [0] * (n + 1)
        g = [0] * (n + 1)
        for i, x in enumerate(nums, 1):
            f[i] = max(g[i - 1] - x, f[i - 1])
            g[i] = max(f[i - 1] + x, g[i - 1])
        return max(f[n], g[n])

7、交替数字和

class Solution:
    def alternateDigitSum(self, n: int) -> int:
        sign, ans = 1, 0      #首先将标志记为1,因为第一位取正号;将最终答案记为0,依次运算相加
        for s in str(n):    #挨个取出字符
            num = int(s)    #定义整型
            ans += num * sign   #计算相加
            sign = -sign    #标志位取相反数
        return ans

8、下降路径最小和

class Solution:
    def minFallingPathSum(self, matrix: List[List[int]]) -> int:
        n = len(matrix)       # n为方阵大小
        fall_sum = [[0]*n for _ in range(n)]       # 定义状态转移矩阵
        # 首行的下降路径最小和为首行元素本身
        for j in range(n):
            fall_sum[0][j] = matrix[0][j]
        # 从第二行开始生成状态矩阵
        for i in range(1,n):
            for j in range(n):
                fall_sum[i][j] = fall_sum[i-1][j]      # 初始为上一行的下降路径最小和
                if j - 1 >= 0:
                    fall_sum[i][j] = min(fall_sum[i][j], fall_sum[i - 1][j - 1])     # 左一列存在,和上一行的左一列比较
                if j + 1 < n:
                    fall_sum[i][j] = min(fall_sum[i][j], fall_sum[i - 1][j + 1])      # 右一列存在,和上一行的右一列比较、
                fall_sum[i][j] += matrix[i][j]        # 上一行三个位置的最小值加上当前位置元素值
        return min(fall_sum[n - 1])           # 从最后一行中找到下降路径最小和

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/758203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle Apex制作一个简单的交互式报表页面&页设计

目录 创建好一个菜单表 简单查询一下&#xff1a; 创建交互式报表 工作报表展示​编辑 菜单报表展示​编辑 页设计器 改变布局样式 修改标签内容 添加验证&#xff06;更改必填项 注意&#xff01; 在主页进行跳转 页跳转按钮 主页可以跳转到指定报表 面包屑 报表也可…

Clickhouse数据一致性和物化视图

Clickhouse 一、数据一致性的保证1.通过Group by对数据去重2.通过 FINAL 查询 二、物化视图1.物化视图与普通视图的区别2.优缺点3.基本语法 三、MaterializeMySQL引擎1.特点2.使用细则 四、常见问题排除分布式 DDL某数据节点的副本不执行数据副本表和数据不一致副本节点全量恢复…

【uniapp开发小程序】设置全屏的开屏广告、长按识别图片、点击跳转通话 拨打电话

设置全屏的开屏广告需求实现 效果图&#xff1a; 点击跳转其他小程序&#xff1a; uni.navigateToMiniProgram() 官方文档&#xff1a;uni.navigateToMiniProgram(OBJECT) | uni-app官网 // 示例代码 uni.navigateToMiniProgram({appId: ,path: pages/index/index?id123,ext…

Cilium核心技术-eBPF XDPTC介绍

eBPF 是一项革命性技术&#xff0c;它能在内核中运行沙箱程序&#xff08;sandbox programs&#xff09;&#xff0c; 而无需修改内核源码或者加载内核模块。 eBPF的一个重要特性是能够使用高级语言(如C)来实现程序。LLVM有一个eBPF后端&#xff0c;用于编辑包含eBPF指令的ELF文…

WEB:Web_php_unserialize

背景知识 反序列化函数及绕过 正则表达式及绕过 题目 源码解析&#xff08;参考链接在最后&#xff09; <?php class Demo { //定义一个类private $file index.php; //变量属性public function __construct($file) { //类方法$this->file $file; …

分布式锁与同步锁

什么是分布式锁 分布式锁是一种在分布式系统中用于协调多个节点访问共享资源的机制。在分布式系统中&#xff0c;由于存在多个节点并行执行任务&#xff0c;可能会出现竞争条件和数据不一致的问题。分布式锁通过约束同一时刻只有一个节点能够获得锁的方式&#xff0c;确保了对…

【计算机视觉】DINOv2(Facebook自监督视觉学习)的环境部署和使用代码示范(含源代码)

文章目录 一、导读二、环境部署三、使用示例 我的代码示范已经上传了Kaggle平台&#xff0c;具体的笔记地址为&#xff1a; https://www.kaggle.com/code/holmes0610/dinov2一、导读 DINOv2&#xff1a;在没有监督的情况下学习鲁棒的视觉特征 这是第一种训练计算机视觉模型的…

2023爱分析·AIGC厂商全景报告|爱分析报告

关键发现 通用大模型市场当前虽入局者众多&#xff0c;但终局将高度集中&#xff0c;未来将由5-6家厂商主导&#xff1b;应用层厂商及甲方企业应着眼终局&#xff0c;从大算力、巨量数据集、端到端AI工程化能力以及应用生态伙伴等维度综合考虑&#xff0c;慎重选择合作伙伴。 …

【LeetCode每日一题合集】2023.7.10-2023.7.16

文章目录 16. 最接近的三数之和排序 双指针 1911. 最大子序列交替和解法——动态规划 2544. 交替数字和&#xff08;简单模拟&#xff09;931. 下降路径最小和&#xff08;线性DP&#xff09;979. 在二叉树中分配硬币⭐⭐⭐⭐⭐&#xff08;dfs&#xff09;18. 四数之和&#…

[JAVA]程序逻辑控制,输入输出

&#x1f349;内容专栏&#xff1a;【JAVA】 &#x1f349;本文脉络&#xff1a;程序逻辑控制&#xff0c;if语句&#xff0c;switch循环&#xff0c;while循环&#xff0c;for循环&#xff0c;do while循环输入输出&#xff0c;例子 &#x1f349;本文作者&#xff1a;Melon_西…

Python:基于matplotlib与mayavi的3D可视化

文章目录 &#xff08;1&#xff09;基于matplotlib的3D可视化&#xff08;2&#xff09;基于mayavi的3D可视化&#xff08;2.1&#xff09;立方体&#xff08;2.2&#xff09;体素体 3D可视化是一种用于呈现三维数据的方法&#xff0c;它可以帮助我们更好地理解和分析复杂的空…

搭建 Java 部署环境,部署 Web 项目到 Linux

为了进行部署&#xff0c;把写好的 java web 程序放到 Linux 上&#xff0c;需要先把对应的依赖的软件 (环境) 搭建好&#xff0c;安装一些必要的软件程序 JDKTomcatMySqL jdk 直接使用包管理器进行安装(基于yum安装) 一、yum 1、认识 yum yum (Yellow dog Updater, Modified…

随机产生50个55以内的不重复的整数,要求查找出一个缺失的整数。

一、设计思路 为随机产生50个55以内的整数且不能重复&#xff0c;应先将已经产生的随机数保存下来&#xff0c;然后在获取到新的随机数时&#xff0c;与之前保存下来的值进行对比&#xff0c;如果已经出现过则抛弃&#xff0c;并再次获取&#xff0c;直到获取到不同的随机值为止…

Redis 从入门到精通【进阶篇】之过期和淘汰策略详解

文章目录 0. 前言Redis过期策略&#xff1a;1. 定期删除&#xff08;定时器方式&#xff09;&#xff1a;2. 惰性删除&#xff08;访问时检查方式&#xff09;&#xff1a; Redis淘汰策略&#xff1a;1. noeviction&#xff1a;2. allkeys-lru&#xff1a;3. volatile-lru&…

GOPATH、GOROOT(VSCode编写第一个go程序)

1. GOROOT和GOPATH GOROOT 和 GOPATH 都是 Go 语言中的环境变量&#xff0c;用于指定 Go 工具链和工作区的路径。 GOROOT 指定了 Go 工具链的安装路径&#xff0c;它包含了 Go 语言的标准库、编译器等工具。在使用 Go 编译器、运行时等工具时&#xff0c;它们会默认从 GOROOT…

Linux ➾ 端口占用检查

Linux ➾ 端口占用检查 &#x1f53b; 前言&#x1f53b; 一、什么是监听端口&#x1f53b; 二、使用lsof命令查看端口占用情况&#x1f53b; 三、使用netstat命令检查监听端口&#x1f53b; 四、使用ss 检查监听端口&#x1f53b; 总结—温故知新 &#x1f53b; 前言 在Linux系…

举例说明基于线性回归的单层神经网络网络(以梯度下降算法来求解权重的过程)...

我们将通过一个简单的例子来说明基于线性回归的单层神经网络&#xff0c;以及如何使用梯度下降算法来求解权重。 假设我们有以下数据集&#xff0c;表示学生的学习时间&#xff08;小时&#xff09;与他们的考试分数&#xff1a; 学习时间&#xff08;X&#xff09;&#xff1a…

C# 反转无头链。

给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0≤n≤1000 要求&#xff1a;空间复杂度 O(1) &#xff0c;时间复杂度 O(n) 。…

【SpringBoot应用篇】SpringBoot集成atomikos实现多数据源配置和分布式事务管理

【SpringBoot应用篇】SpringBoot集成atomikos实现多数据源配置和分布式事务管理 分布式事务概念XA和JTA概述SpringBoot集成atomikos数据库结构pom通用工具类RBaseControllerBaseExceptionCodeExceptionCodeBaseExceptionBaseUncheckedExceptionBizException application.yml数据…

【C语言】扫雷----详解(扩展版)

&#x1f341; 博客主页:江池俊的博客_CSDN博客 &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f31f; 三连支持一下博主&#x1f49e; ✉️每一次努力都是一次进步&#xff0c;每一次尝试都是一次机会。无论遇到什么困难&#xff0c;…