【leetcode】两数相加(算法)

python【力扣LeetCode算法题库】2-两数相加 两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0... 阅读详情

两数之和

 

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

看到题目我首先想到的是将目标值(target)拆分,将目标值变成0+target,1+(target-1),...,(target/2)+(target-target/2).

由于第一次做算法题,我这种思想在我刚准备打代码时就直接被我抛之脑后,因为这种思路其实很'暴力',数组可能根本没有这么多数,如果给定的target很大,那我势必会在拆分上花费很大的开销。

那么现在,我们可以改进,得到的是,直接用target减去数组里的数,用得到的数去从数组里找,这样的话我们就节省很多。这是又有一个小问题,如果你从数组里找,你每减一个数,你势必需要遍历一遍数组。而我是将target减过的数放进List里面,从后面找前面已有的数。

 

代码如下:

class Solution {
    public int[] twoSum(int[] nums, int target) {
         List list =new ArrayList<Integer>();
         int result[] = new int[2];
        for (int i = 0 ;i<nums.length;i ++){
            if (list.contains(target-nums[i]))
            {
                result[0]=list.indexOf(target-nums[i]);
                result[1]=i;
                break;
            }else {
                list.add(nums[i]);
            }
        }
        return result;
    }

}

时间复杂度为O(n),运行的时间大概为几十ms,下面则是几ms的代码;

 

class Solution {
    public int[] twoSum(int[] nums, int target) {
		// 先复制一份数组
		int[] newNums = Arrays.copyOf(nums, nums.length);
		// 排序复制的数组
        Arrays.sort(newNums);
        // 结果集
        int[] res = new int[2]; 
        // 循环遍历每一个
        for (int i=0; i<newNums.length - 1; i++) {
        	// 如果剩余的数只有一个,那么判断这一个,并退出循环
        	if (newNums.length-i-1 == 1) {
            	if (newNums[i]+newNums[i+1] == target) {
            		res = new int[]{i,i+1};
            	} else {
            		res = null;
            	}
            	break;
            }
        	
        	// 如果剩余的不只一个,则用二分法
        	int num = newNums[i];
        	int rest = target-num;
        	
        	int start = i+1;
        	int end = newNums.length-1;
        	int mid; // = (start+end) / 2;
        	int src = -1;
        	while(start < end) {
        		mid = (start+end+1) / 2;
        		if (rest < newNums[mid]) {
        			end = mid-1;
        		} else if (rest > newNums[mid]) {
        			start = mid+1;
        		} else {
        			src = mid;
        			break;
        		}
        	}
        	if (start == end && newNums[start] == rest) {
        		src = start;
        	}
        	// 如果二分法找到,则退出循环
        	if (src != -1) {
        		res[0] = i;
        		res[1] = src;
        		break;
        	}
        }
        
        boolean flag1=false;
        boolean flag2=false;
        
        // 在原数组中查找位置
        for(int i=0; i<nums.length; i++) {
        	if (flag1 && flag2) break;
        	if (!flag1 && nums[i] == newNums[res[0]]) {
        		res[0] = i;
        		flag1 = true;
        		continue;
        	}
        	if (!flag2 && nums[i] == newNums[res[1]]) {
        		res[1] = i;
        		flag2 = true;
        	}
        }
		return res;
    }
}

 

 

 

如何修改网页中的文本内容改成自己希望的数值? 本篇文章主要讲解,通过浏览器命令和浏览器自带的F12开发者工具,进行修改网页内容的方法教程 日期:2021年12月5日 作者:任聪聪 一、通过F12开发者工具进行修改 进入方式汇总: 1.右击鼠标,显示菜单找到审查 2.通过快捷键F12进入,笔记本需要先关闭fnlk功能键。 开发者工具介绍 说明: 1.表示选择元素,点击后可以选择文本的元素所在地 2.表示显示方式,手机还是电脑 3.表示div元素,点击后可以展开,对div内的html和文本进行编辑。 双击文本,即可进行修改成自己想要的,但是刷新后. 阅读详情

相关推荐

从代码学习深度强化学习 - 目标导向的强化学习-HER算法 PyTorch版

经典的深度强化学习算法,如 PPO、SAC 等,在各自擅长的任务中都取得了非常好的效果。但它们通常都局限在解决单个任务上,换句话说,训练好的算法,在运行时也只能完成一个特定的任务。想象一个场景:我们想让一个机械臂能把桌子上的任何一个物体重置到任意一个指定位置。对于传统强化学习而言,如果目标物体的初始位置和目标位置每次都变化,那么这就是一个全新的任务。即便任务的“格式”——抓取并移动——是一样的,但策略本身可能需要重新训练。这显然效率极低。为了解决这类问题,

weixin_43887510的博客 1500

LeetCode——两数相加

给你两个的链表,表示两个非负的整数。它们每位数字都是按照的方式存储的,并且每个节点只能存储数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

冷兮雪的博客 3651

[南大ICS-PA2] 字符串处理函数和printf实现

[南大ICS-PA2] 程序、运行时环境与AM 字符串处理函数和printf实现

qq_42474104的博客 2987

两个数字相加的代码

两个整数之和的代码

m0_72901410的博客 4936

现场总线课程设计-基于modbus协议使用QT实现主从站控制通信

【平台:QT】 【协议:modbus(注:由于要求,需要自己来实现modbus库,而非直接调用已有的库)】 【由于复制粘贴,时间原因可能格式有误,如需要具体工程文件以及报告文件请私信博主】 1、 大作业任务: (1)使用附件中工具软件体验MODBUS主从站数据传输过程(可在主从站模拟工具里面观察各功能码对应数据帧内容并对其进行分析) (2)使用串口调试助手,手工发出MODBUS主、从站该发出的数据,并观察对方发出的数据 (3)实现MODBUS主、从站功能,描述实现过程(语言不限于使用VC

weixin_44469597的博客 4066

导数与微分在 FPS 射击游戏中的实际应用:把“手感”算出来

摘要:射击游戏开发中,单线程适用于简单小游戏(如单机打靶),所有任务由主线程顺序处理,代码简单但效率较低;多线程则适合复杂场景(如多人在线3D大作),通过渲染、逻辑、网络、音效等线程分工协作,确保画面流畅、响应迅速和实时同步。选择依据取决于游戏复杂度、联网需求和性能要求,小型游戏用单线程,大型高要求项目必须采用多线程架构。(149字)

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 3278

算法:两数相加(add-two-numbers)。

给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

孤芳不自赏 4237

YOLOv8改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)

本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块,我们将其用于C2f中组合出一种新的结构,来替换我们网络中的模块可以达到一种轻量化的作用,我将其用于我的数据集上实验,包括多个类别的数据集,其在轻量网络结构的同时,却能够提高一定的mAP精度,所以这是一种十分高效的模块,该网络结构非常适合那些模型精度已经无法提到,想要从轻量化模型的角度入手的读者使用。欢迎大家订阅本专栏,本专栏每周更新3-5篇最新机制,更有包含我所有改进的文件和交流群提供给大家。

Snu77的博客 6094

【透过算法了解编程】之两数相加

Hello,大家好,我是猿码叔叔,2022年的第一天就迫不及待的与大家见面了,开森 ~。 2022是一个偶数,且无论个位十位还是百位都是偶数,预示每一位阅读以及博主自己一定会脱单。 今天要写的是两数相加,比起去年的两数之和的难度稍稍有些提升,但不影响我们透过算法了解编程的乐趣。 ????题目: 两数相加(Add Two Numbers) ????题目介绍: 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同

qq_42349895的博客 1145

《网络信息制作与发布》实训全流程:从专题策划、网站构建到前端实现与上线发布

本文详细介绍了WEB设计专题网站从策划到发布的全流程。主要内容包括:1.网络专题设计(确定主题、编写策划方案、素材搜集整理);2.网站结构构建(设计二级栏目、绘制布局图);3.艺术设计(配色方案、版式设计);4.网页制作(使用Dreamweaver进行标准化布局);5.信息发布(通过Dreamweaver和CuteFTP上传文件、网站维护与备份)。以"学习WEB设计"专题为例,采用框架结构,包含20余个栏目,使用深灰和蓝色为主色调。文章提供了完整的操作步骤和技术要点,适用于网站开发学习者

深耕计算机专业知识与技术。 1532

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3788

简单C语言两数相加

两数相加

m0_74120645的博客 3634

完整的 Python 数据分析案例:新能源汽车续航里程预测

随着新能源汽车的普及,续航里程成为消费者关注的重要指标。准确预测新能源汽车的续航里程,有助于车企优化电池管理系统、提升车辆性能,也能帮助消费者合理规划出行。本案例将基于新能源汽车的各项参数,如电池容量、行驶速度、环境温度等,构建续航里程预测模型。通过以上改进,可以提高数据处理的准确性、模型的性能和可视化的效果。

daqsdfas的博客 1588

『力扣和笔试算法』LeetCode:2.两数相加!

2. 两数相加! 文章目录1. 题目描述2. 算法实现2.1. 整体思路2.2. 实现代码参考文章 1. 题目描述 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字0之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 ->

AI新视界 719

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

力扣算法第二题:两数相加

力扣第二题 题目 两数相加 思路及问题 1.首先,没学过怎么用java表示链表,或者学过忘了。所以得查一下怎么表示。 JAVA表示链表*[作者YSOcean] 2.行吧,看了一下午还是不会,然后就直接看答案了,看答案还是有点一愣一愣的,理解得有点模糊,状态都不在了,先缓一下。但是先贴上答案代码,然后再说说自己的理解。 代码 public ListNode addTwoNumbers(ListNo...

Zero_HWA的博客 6090

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

从力扣出发,接触算法 Leetcode 1 两数相加

见微知著,是我主张的学习思路,虽然很难想象有人会在2026年去讲 leetcode 001,但是从另一个角度或许我们能够更好的体会到AI时代为什么 算法题在面试和证明个人编程水平上仍旧是不可或缺的一部分。

2402_87712665的博客 884

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode 算法:两数相加 c++

LeetCode 算法:两数相加 c++

世界那么大,我想去看看~【随心更新,看世界去了😄】 1326

leetcode算法--两数相加

leetcode算法题目:两数相加 题目描述: 解析:本题两种方式解决 一种是算出两数相加得出和,再转化为链表,但是这样的话和可能会很大就回导致得到的和无法接受要用到long类型甚至long long类型; 另一种方式:我们可以注意到我们只需将两个链表同时遍历相加将得到的和mod10即可插入到新的链表中,但由于会和会大于10而进1所以我们要设置一个变量carry用来携带进位的数;这样我们把所有可能列出来如下: 1.链表l1比链表l2长,此时l2先结束遍历,当然不能忘了carry if((l2==null)

fetwan的博客 147

算法——力扣两数相加Python解法

力扣两数相加Python解法 直接上代码 class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ lret = ...

qq_43764365的博客 2915

leetcode算法题练习--两数相加(C语言)

leetcode算法练习–两数相加 近期要准备复试,所以重新开始学习c语言,就单这道题我就回忆起了不少的知识点。于是想记录下来,便于回顾。 之后若重复刷题,将会把更好的解法给补上去。 1问题如下 You are given two non-empty linked lists representing two non-negative integers. The digits are store...

weixin_38072112的博客 523

【leetcode】力扣算法之两数相加【中等难度】

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

小马哥的博客 1049

力扣(LeetCode)算法题(二) 两数相加

给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 来源:力扣(LeetCode) 链接:https://le...

于小鱼的博客 269

LeetCode算法(2)_两数相加

LeetCode算法(2)_两数相加 import java.util.LinkedList; import java.util.List; /* * @lc app=leetcode.cn id=2 lang=java * * [2] 两数相加 */ // @lc code=start /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode n.

MUTONG的博客 160

力扣算法 -- 两数相加

力扣算法

m0_64489692的博客 517

【LeetCode】【算法】2. 两数相加

LeetCode 2. 两数相加

passer__jw767的博客 416

java学习随笔之力扣(LeetCode)算法题--2.两数相加

题目:2.两数相加 --------- 难度:中等 题目链接: https://leetcode-cn.com/problems/add-two-numbers/ 题目描述: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例1: 输入:L1 = [2,4,3], L2 = [5,6,4] 输出:[7,0,8] 解释:

qq_45975878的博客 768
下一篇: SpringMVC中@PathVariable和@RequestParam之间的区别
PI_PIBOY
博客等级 码龄9年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值