算法day32|122,55,45

news2025/2/25 12:09:02

122.买卖股票的最佳时机II

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit = 0
        for i in range(len(prices)-1):
            diff = prices[i+1]-prices[i]
            if diff > 0:
                profit += diff
            else:
                profit += 0
        return profit

简单到我不敢相信。

本题解法很巧妙,大家可以看题思考一下,在看题解。

局部最优:收集每天的正利润,全局最优:求得最大利润

局部最优可以推出全局最优,找不出反例,试一试贪心!

题解

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        result = 0
        for i in range(1, len(prices)):
            result += max(prices[i] - prices[i - 1], 0)
        return result

代码随想录

55. 跳跃游戏

那么这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!

每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。

贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        cover = 0
        #如果nums里面只有一个数,总是能到达终点的
        if len(nums) == 1:return True
        i = 0
        while i <= cover:
            cover = max(i+nums[i],cover)
            if cover >= len(nums)-1:
                return True
            i += 1
        return False

还挺难理解的,就是说,局部最优,每次都走最大的。看这个图。一切就明白了 

代码随想录

45.跳跃游戏II

class Solution:
    def jump(self, nums: List[int]) -> int:
        curdistance = 0
        count = 0
        nextdistance = 0
        for i in range(len(nums)):
            nextdistance = max(i+nums[i],nextdistance)
            if i == curdistance:
                if curdistance !=len(nums)-1:
                    count +=1
                    curdistance = nextdistance
                    if nextdistance >=len(nums)-1:
                        break
                else:
                    break
        return count 

好难理解,我不太能理解反正就是。。。

class Solution:
    def jump(self, nums: List[int]) -> int:
        curdistance = 0
        count = 0
        nextdistance = 0
        for i in range(len(nums)-1):
            nextdistance = max(i+nums[i],nextdistance)
            if i == curdistance:
                curdistance = nextdistance
                count +=1
        return count 

复习

203.移除链表元素

细节错误:

忘记创建虚拟头节点

然后需要遍历到最后一个元素的前一个元素

然后还需要判断head是否为空,如果为空的话,就return一个空值

class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        #循环这个链表
        if head is None:
            return 
        dummy = ListNode(0)
        dummy.next = head
        cur = dummy
        #这个细节有问题
        while cur.next is not None:
            if cur.next.val == val:
                cur.next = cur.next.next
            #这个细节有问题
            else:
                cur = cur.next
        return dummy.next

 707. Design Linked List

插入节点的时候,记得创建temp变量来存储对应的节点

还有需要记得index 会不会溢出

class ListNode(object):
    def __init__(self,val):
        self.val = val
        self.next = None
class MyLinkedList(object):

    def __init__(self):
        self.dummy_head = ListNode(0)
        self.size = 0

    def get(self, index):
        """
        :type index: int
        :rtype: int
        """
        #注意
        if index <0 or index >= self.size :
            return -1
        cur = self.dummy_head
        for i in range(index+1):
            cur = cur.next
        return cur.val
             
    def addAtHead(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.addAtIndex(0,val)
        

    def addAtTail(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.addAtIndex(self.size,val)
        

    def addAtIndex(self, index, val):
        """
        :type index: int
        :type val: int
        :rtype: None
        """
        #注意
        if index > self.size:
            return
        cur = self.dummy_head
        newNode = ListNode(val)
        for i in range(index):
            cur = cur.next
        temp = cur.next
        cur.next = newNode
        newNode.next = temp 
        self.size += 1
        
            
        

    def deleteAtIndex(self, index):
        """
        :type index: int
        :rtype: None
        """
        #注意
        if index < 0 or index >= self.size:
            return
        cur = self.dummy_head
        for i in range(index):
            cur = cur.next
        cur.next = cur.next.next
        self.size -=1

206.反转链表

还比较简单,记得起来怎么写

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        dummy = None
        cur = head
        pre = dummy
        while cur is not None:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pre
        

 

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

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

相关文章

Redis实战——缓存

目录 1 前言 1.1什么是缓存&#xff1f; 1.2 缓存的作用及成本 1.3 Redis缓存模型 2 给商户信息添加缓存 3 缓存更新策略 3.1 更新策略介绍 3.2 主动更新策略 3.3 主动更新策略练习 4 缓存穿透及其解决方案 4.1 缓存穿透的概念 4.2 解决方案及实现 5 缓存雪崩的…

C++:STL::String模拟实现

前言&#xff1a; 浅拷贝和深拷贝 实现string需要知道深浅拷贝问题。观察如下自命名空间中实现的string&#xff0c;不自写string的string类型参数的构造函数&#xff0c;编译器会默认生成&#xff0c;做浅拷贝。对于自定义类型使用自定义类型的构造函数&#xff0c;如果是默认…

基于遗传算法的PID控制器增益的实现(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【信息量判别块:语义监督:GAN:IVIF】

Semantic-supervised Infrared and Visible Image Fusion via a Dual-discriminator Generative Adversarial Network &#xff08;通过双重鉴别器生成对抗网络进行语义监督的红外和可见光图像融合&#xff09; 我们提出了一种新的端到端模型&#xff0c;以在红外和可见光图像…

java序列化,看这篇就够了

面试官&#xff1a;兄弟&#xff0c;说说你对transient的理解和感悟 哪吒&#xff1a;what&#xff1f;还有感悟&#xff1f; 先说结论&#xff0c;在序列化、反序列化时&#xff0c;被transient关键字修饰的成员属性变量不会被序列化。 面试官&#xff1a;这就完了&#xf…

Flutter高仿微信-第51篇-群聊-修改群名

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; //修改群名 void _updateGroupName(){bool isOwner fals…

Multi-Interest Network with Dynamic Routing forRecommendation at Tmall 论文阅读笔记

1. ABSTRACT 1.1 Industrial recommender systems &#xff08;1&#xff09;工业推荐系统通常由匹配阶段和排名阶段组成&#xff1b; &#xff08;2&#xff09;匹配阶段&#xff1a;检索与用户兴趣相关的候选项&#xff1b; &#xff08;3&#xff09;排名阶段&#xff1a;…

Spring Cloud OpenFeign - - - > 日志配置

项目源码地址&#xff1a;https://download.csdn.net/download/weixin_42950079/87168704 OpenFeign 有 4 种日志级别&#xff1a; NONE: 不记录任何日志&#xff0c;是OpenFeign默认日志级别&#xff08;性能最佳&#xff0c;适用于生产环境&#xff09;。BASIC: 仅记录请求方…

BT - Unet:生物医学图像分割的自监督学习框架

BT-Unet采用Barlow twin方法对U-Net模型的编码器进行无监督的预训练减少冗余信息&#xff0c;以学习数据表示。之后&#xff0c;对完整网络进行微调以执行实际的分割。 BT-Unet由 Indian Institute of Information Technology Allahabad开发&#xff0c;发布在2022年的JML上 …

相关性质和条件变量-ReentrantLock详解(2)-AQS-并发编程(Java)

文章目录1 可重入2 可打断3 公平锁4 条件变量4.1 await()4.1.1 主方法4.1.2 addConditionWaiter()4.1.3 isOnSyncQueue()4.1.4 checkInterruptWhileWaiting()4.2 signal()4.2.1 主方法4.2.2 doSignal()4.2.3 transferForSignal()5 后记1 可重入 可重入在加锁中体现代码如下&am…

零经验,小白变大厨!

平时煮泡面都会翻车的老王      昨天在朋友圈po了一组美食图      朋友小聚,20分钟搞定一桌菜,嘻嘻。      我点开一看,嚯!      红烧里脊、糖醋排骨、油焖大虾、剁椒鱼头……个顶个的硬菜,而且色泽诱人看起来很好吃的样子,关键是居然20分钟搞定?      难…

2022 高教杯数学建模C题古代玻璃制品的成分分析与鉴别回顾及总结

2022 高教杯数学建模C题古代玻璃制品的成分分析与鉴别回顾及总结 Paper & Code&#xff1a;https://github.com/Fly-Pluche/2022-mathematical-modeling-C 希望可以施舍几个star⭐️ 国赛分工 我们三人都有主要的分工: 队员A主要负责二&#xff0c;三问的求解以及代码的编…

被问到可重入锁条件队列,看这一篇就够了!|原创

本文深入解读了高频面试点——ReentrantLock的条件队列使用方法及其原理。源码有详细注释&#xff0c;建议收藏阅读。点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达Jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantL…

用HTML+CSS做一个简单的新闻门户 1页网页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | 等网站的设计与制作 | HTML期末大学生网页设计作业&#xff0c;…

Web前端大作业—电影网页介绍8页(html+css+javascript) 带登录注册表单

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

DevOps初学者的指南——阿里出品学习图册带你掌握高薪技术!

开篇 你是否想开始学习DevOps&#xff0c;或者愿意通过增加DevOps这一技能来转变你的职业生涯&#xff1f; 如果你的答案是肯定的&#xff0c;那么你就来对地方了 从初创企业到跨国企业&#xff0c;技术行业的每个细分领域都在改变其软件开发方法。DevOps工具和实践惊人地减…

【mysql 高级】explain的使用及explain包含字段的含义

explain的使用及explain包含字段的含义1.id2. select_type3.table4.type5.possible_keys6.key7.key_len8.ref9.rows10.Extra使用explain关键字可以模拟优化器执行SQL语句&#xff0c;从而知道MySQL是如何处理你的SQL语句的&#xff0c;从而分析你的查询语句或是表结构的性能瓶颈…

面向OLAP的列式存储DBMS-10-[ClickHouse]的常用数组操作

参考ClickHouse 中的数据查询以及各种子句 ClickHouse 数组的相关操作函数&#xff0c;一网打尽 在关系型数据库里面我们一般都不太喜欢用数组&#xff0c;但是在 ClickHouse 中数组会用的非常多&#xff0c;并且操作起来非常简单。ClickHouse 里面提供了非常多的函数&#x…

文本生成视频Make-A-Video,根据一句话就能一键生成视频 Meta新AI模型

Meta公司&#xff08;原Facebook&#xff09;在今年9月29日首次推出一款人工智能系统模型&#xff1a;Make-A-Video&#xff0c;可以从给定的文字提示生成短视频。 Make-A-Video研究基于文本到图像生成技术的最新进展&#xff0c;该技术旨在实现文本到视频的生成&#xff0c;可…

[附源码]Python计算机毕业设计高校第二课堂管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…