算法___

文章目录

  • 算法
    • 两数之和
    • 两数相加

算法

两数之和

题目如下图:
在这里插入图片描述
我的答案如下图:
在这里插入图片描述
我采用的是最笨的思路,直接暴力的两次循环,第一次外循环是取数组的第一个元素,然后内循环会遍历数组后面除第一个的所有元素,然后和第一个元素相加,看看结果是否为目标值,如果是的话,就证明i和j就是我们所求的下标,接下来,我们就直接把i和j放到数组里面就行了。直接return。
我循环是从第一个元素取到倒数第二个元素,比如我们一共有max个元素,当前外循环取的是第n个元素,那么内循环就要循环从n+1到max的所有元素,都和第n个元素加一遍。

但是我用的方法太过于暴力了,时间复杂度为O(n^2)。那么有没有高效一点的,时间复杂度低一点的解法,有的,可以使用哈希映射这是我在评论区看到的解法,确实比我的解法要好,代码如下图:
在这里插入图片描述
可以发现这种解法循环的时间复杂度为O(n),要比上面的那种暴力解法有效率的多。所以解题的时候有时候借助map哈希映射会变得非常有效率。

注意怎么看时间复杂度,其实就是看你循环的层数的乘积,比如你是两层循环那么你就是O(n^2)。这里其实是使用map哈希映射代替了一层内循环。非常nice。

两数相加

题目如下:
在这里插入图片描述
在这里插入图片描述
解题代码如下图:
在这里插入图片描述
在这里插入图片描述
三个测试用例如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode result = null;
        ListNode head = null;
        int jinWei= 0;
        while(l1 != null || l2 != null) {
            int value1 = l1 != null ? l1.val : 0;
            int value2 = l2 != null ? l2.val : 0;
            int sum = value1 + value2;
            int mod = (sum + jinWei) % 10;
            if(head == null) {
                head = new ListNode(mod);
            } else {
                head.next = new ListNode(mod);
                head = head.next;
            }
            
            if(result == null) {
                result = head;
            }

            jinWei = (sum + jinWei) / 10;

            if(l1 != null) {
                l1 = l1.next;
            }
            if(l2 != null) {
                l2 = l2.next;
            }

        }

        if(jinWei > 0) {
            head.next = new ListNode(jinWei);
        }
        return result;
    }
}

几个要点

  • 第一个要点是这个题与我们常规的逻辑是相反的,比如说我们常规两数相加的时候,都是两个数的右边对齐,也即是从两个数的最后一位开始相加,然后进位的时候也是从右边往左边进位;但是你可以发现,本题中的两数相加是倒着我们的真实情况来的,也就是两个数会让他们左对齐,从左边开始相加,并且进位的时候也是从左边进位到右边的。
  • 第二个要点是,当结束for循环之后,可能虽然我们把数都加完了,但是可能有进位,比如说9999 + 99的时候,当四次while循环之后,会进1,因此我们最后如果有进位,则需要往链表末尾添加一个链表节点。
  • 第三个要点是,用result存储链表的第一个节点的地址;而使用head存储当前循环的链表节点的地址。
  • 第四个要点是,可以把本次的两数相加,类比成正常的两数相加,只不过逻辑倒着来就可以了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LLM之RAG理论(一)| CoN:腾讯提出笔记链(CHAIN-OF-NOTE)来提高检索增强模型(RAG)的透明度

论文地址:https://arxiv.org/pdf/2311.09210.pdf 检索增强语言模型(RALM)已成为自然语言处理中一种强大的新范式。通过将大型预训练语言模型与外部知识检索相结合,RALM可以减少事实错误和幻觉,同时注入最新知识。然而&…

【上海大学数字逻辑实验报告】六、时序电路

一、 实验目的 掌握同步二进制计数器和移位寄存器的原理。学会用分立元件构成2位同步二进制加计数器。学会在Quartus II上设计单向移位寄存器。学会在Quartus II上设计环形计数器。 二、 实验原理 同步计数器是指计数器中的各触发器的时钟脉冲输入端连接在一起,接…

【lesson12】表的约束(5)

文章目录 表的约束的介绍外键约束测试建表插入测试建表插入测试 理解外键约束 表的约束的介绍 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。…

SpringIOC之ConditionEvaluator

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

C语言--与||符号介绍与短路现象

一.&&且 表达式1&&表达式2:表达式1为真并且表达式2为真,整体表达式才为真,其它为假。 注意短路现象:(假&&假->假)(假&&真->假),如…

GeoPandas实操:读取数据

GeoPandas 支持读取和写入多种地理空间数据格式,如 ESRI Shapefile、GeoJSON、GeoPackage 等,以及与其他 GIS 软件兼容的格式。 1. 读取数据 1.1. 读取ESRI Shapefile数据 ESRI Shapefile(简称 Shapefile 或 .shp 文件)是一种常…

vue实现移动端适配

目录 1. 使用vw单位:vw是视窗宽度的百分比,可以根据不同设备的屏幕宽度来进行自适应。在Vue中可以通过设置全局CSS样式,将所有的尺寸单位改为vw。 2. 使用Flexible.js:Flexible.js是一个用于淘宝移动端适配的库,可以…

【lesson11】表的约束(4)

文章目录 表的约束的介绍唯一键约束测试建表插入测试建表插入测试建表插入测试修改表插入测试 表的约束的介绍 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保…

实验7:索引和视图定义

【实验目的】 1、了解索引和视图的含义 2、熟悉索引和视图的创建规则 3、掌握索引和视图的创建和管理 【实验设备及器材】 1、硬件:PC机; 2、软件:(1)Windows7; (2)Microsoft SQL Server 2012。 【主要内容】 索引的创建、删除、重建…

C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现

前言: 在之前的文章C# Socket通信从入门到精通(13)——单个异步UDP客户端C#代码实现我介绍了单个异步Udp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步发送、异步接收的操作,那么这时候我们使用之前单个异步Udp客…

轻松理解 七大排序算法 (C语言实现)

目录 1. 冒泡排序 基本思想: 时间复杂度: 优化: 代码展示: 特性总结: 2. 直接插入排序 基本思想: 时间复杂度: 代码实现: 特性总结: 3. 简单选择排序 基…

披荆斩棘的「矿区无人驾驶」,能否真正打开千亿级市场?

随着2022年备受瞩目的台泥句容矿无人驾驶运输项目硬核落地,以及相关科技公司开放该矿24小时无人矿卡生产运营直播以证明其项目并非在演示,2023年全国开启了大规模矿区无人驾驶商业化落地,堪称矿区无人驾驶元年。虽然我国矿区无人驾驶市场渗透…

MSPM0L1306例程学习-ADC部分(1)

MSPM0L1306例程学习-ADC部分(1) MSPM0L1306例程学习 使用的TI的官方例程,即SDK里边包含的例程代码。 MCU使用的是MSPM0L1306, 对于ADC部分,有10个例程: 例程理解 ADC的转换有多种工作模式,从最简单的单通道单次转换开始入手…

【LeetCode题目拓展】第207题 课程表 拓展(拓扑排序、Tarjan算法、Kosaraju算法)

文章目录 一、拓扑排序题目二、题目拓展1. 思路分析2. tarjan算法3. kosaraju算法 一、拓扑排序题目 最近在看一个算法课程的时候看到了一个比较好玩的题目的扩展,它的原题如下: 对应的LeetCode题目为 207. 课程表 这个题目本身来说比较简单&#xff…

单元测试技术

文章目录 一、单元测试快速入门二、单元测试断言三、Junit框架的常用注解 一、单元测试快速入门 所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。 常规的例如如果在main中测试,比如说我们写了一个学生管理系统&…

【九】spring、springmvc、springboot、springcloud

spring、springmvc 、springboot 、springcloud 简介 从事IT这么些年,经历了行业技术的更迭,各行各业都会有事务更新,IT行业技术更迭速度快的特点尤为突出,或许这也是从事这个行业的压力所在,但另一方面反应了这个行业…

2023年第三季度全球SSD出货量环比增长24%,市场复苏!

根据Trendfocus发布的研究报告显示:2023年第三季度全球SSD出货量环比增长24%,达到9306万pcs,出货容量也增长了21%,达到7769EB。三星出货量市场TOP1,其次是WDC西部数据、金士顿、镁光Micron、海力士等。 由于PC OEM连续…

【精选】小白是如何挖漏洞的(技巧篇)

目录: 怎么找漏洞 找到后如何挖漏洞 关于通杀漏洞N day漏洞的挖掘 漏洞如何提交 每小结都有提供对应的案例,简直不要太nice! 这个月的SRC活动也快开始了,看到群里的小伙伴在问如何找漏洞,SQL注入的漏洞咋找&#x…

jQuery遍历与删除添加节点

个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习目标: 坚持每一次的学习打卡 文章…

极简壁纸js逆向(混淆处理)

本文仅用于技术交流,不得以危害或者是侵犯他人利益为目的使用文中介绍的代码模块,若有侵权请练习作者更改。 之前没学js,卡在这个网站,当时用的自动化工具,现在我要一雪前耻。 分析 第一步永远都是打开开发者工具进…