LeetCode01两数之和

题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

分析:

题意就是让你从数组中找到两个位置他们对应位置的和为target。

本题主要有暴力和哈希两种方法:

法一:暴力法

把所有两两配对的问题全部遍历出来,知道找到满足题意得结果为止,时间复杂度O(n2)

代码:

/*

* 时间60ms

*/

public int[] twoSum(int[] nums, int target) {

int a[]=new int[2];

for(int i=0;i

{

for(int j=i+1;j

{

if(nums[i]+nums[j]==target)

{

a[0]=i;

a[1]=j;

return a;

}

}

}

return a;

}

法二:借助哈希(一次)

对于上述问题,你可能会疑问:能不能快速得直接知道这个数据是否存在呢?本题得目标是求得两个位置的和为target。这种问题当然可以使用哈希帮忙处理啊:在第一次遍历你可以用一个HashMap先把各个位置的值-位置当成Key-Value存储,然后进行第二次遍历只需要判断这个HashMap中是否存在(target-a[index])值就可以判断是否存在了。(这种情况要先遍历一遍,n个元素都要)

如果遇到两个同元素就错误了,能不能又正确再简单一点?

答案是可以的,其实我们不需要用hash存储所有,边走边存即可。为什么我们可以这么考虑?因为如果从数的特性来看:数是一对形式出现的

一对有前后位置之分,在遍历到前的时候不一定会找到后面的元素,但是遍历到后面的元素前面一定被我们存储了。

ac代码为:/*

* 3ms

*/

public int[] twoSum2(int[] nums, int target) {

int a[]=new int[2];

Mapmap=new HashMap();

for(int i=0;i

{

if(map.containsKey(target-nums[i]))

{

a[0]=i;

a[1]=map.get(target-nums[i]);

return a;

}

else {

map.put(nums[i], i);

}

}

return a;

}

LeetCode02两数之加

题目描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

原因:342 + 465 = 807

分析:

本题其实就是用一个链表存储一个数字(逆序存储),你需要给它计算出结果后在 逆序 存储到一个链表中返回。

所谓加法的运算规则:从两个数的最低位进行计算,进行到下一位的时候需要考虑进位问题。一直到最后,而本题所给的链表刚好可以用来直接计算,因为链表头都是数字最低位可以直接相加,然后一直遍历到结束。可以用一个常数表示进位。

在具体实现(链表)的时候:创建新的链表,每次将计算的数值插入到链表尾部即可。

需要准确表示进位,并且最后要考虑以下进位

妥善返回正确节点,可以用一个头节点用来使得所有节点都正常操作,而不需要特殊判断。

通过代码第一次比较啰嗦的写法:

当然,如果你遍历链表把各个数字取出来,使用字符串、数字转换然后相加得到一个数字,最后在转成字符串、链表的理论可以,可以自行实现。

第一次比较臃肿但易理解代码为:public ListNode addTwoNumbers(ListNode l1, ListNode l2){

ListNode node=new ListNode(0);//用一个头节点(不存真实的值)

ListNode team=node;

int jin=0;//进位

while(l1!=null&&l2!=null)//当可以正常相加时候

{

int num=l1.val+l2.val+jin;//该位理论的数字

jin=num/10;//进位0 或 1

num%=10;//实际能表示的数字

team.next=new ListNode(num);//将数字放到下一个节点中

team=team.next;//往下进行

l1=l1.next;l2=l2.next;

}

//其中一个为null或全为null时候

while (l1!=null) {

int num=l1.val+jin;

jin=num/10;

num%=10;

team.next=new ListNode(num);

team=team.next;

l1=l1.next;

}

while (l2!=null) {

int num=l2.val+jin;

jin=num/10;

num%=10;

team.next=new ListNode(num);

team=team.next;

l2=l2.next;

}

if(jin!=0)team.next=new ListNode(jin);

return node.next;

}

优化后的代码为://更简洁的写法

public ListNode addTwoNumbers(ListNode l1, ListNode l2){

ListNode node=new ListNode(0);

ListNode team=node;

int jin=0;//进位

while(l1!=null||l2!=null)

{

int num=jin;

if(l1!=null)

{

num+=l1.val;l1=l1.next;

}

if(l2!=null)

{

num+=l2.val;l2=l2.next;

}

jin=num/10;

num%=10;

team.next=new ListNode(num);

team=team.next;

}

if(jin!=0)team.next=new ListNode(jin);

return node.next;

}

当然,如果遇到评论区或者其他好的方法也可以,如果我错误还请指正。

mysql 两个数相加_LeetCode 01两数之和02两数相加相关推荐

  1. LeetCode 01两数之和02两数相加

    力扣 LeetCode01两数之和 LeetCode02两数之加 前言:第一次LeetCode打卡题解,前面组织的打卡活动从今天开始正式开始了,很多csdn和公众号小伙伴以及加入了,欢迎加入!详细看力 ...

  2. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  3. 算法笔记-两数之和、三数之和、四数之和(LeetCode)

    两数之和 1.两数之和 题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...

  4. 两数之和、三数之和、四数之和、K数之和

    两数之和.三数之和.四数之和和K数之和是最近听室友提起的几道有意思的基础题,可以说是把双指针运用的淋漓尽致.(K数之和其实是一个动态规划的题,此处因为满足*数之和的的结构,放在一起对比提一下). 1. ...

  5. 我理解的算法 - 三数之和及两数、三数之和扩展题

    我理解的算法 - 三数之和及两数.三数之和扩展题 LeetCode 15.三数之和 扩展 三数之和变种题 两数之和变种题 LeetCode 15.三数之和 这道题的题目大家自行查看:链接在这 ,题目和 ...

  6. 【LeetCode】两数之和、三数之和、四数之和系列

    文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...

  7. leetcode两数之和,三数之和,四数之和问题

    1. 两数之和 遍历数组的同时,使用字典(哈希表)记录数对应的索引,对于每一个数nums[i],判断 target-nums[i]是否在字典中,找到一个即返回.若列表中的与元素有重复也可这样处理,因为 ...

  8. 用函数计算两数之和和两数之积

    函数的优点 函数是面向过程编写的最重要的语法结构 在工程上函数可以使我们的代码更具有结构性,更加美观 函数也可以提升我们的代码可维护性 运用函数计算两数之和和两数乘积 int MyAdd(int _x ...

  9. 代码随想录算法训练营day6| 454.四数相加II 383.赎金信 15.三数之和 18.四数之和

    代码随想录算法训练营day6| 454.四数相加II 383.赎金信 15.三数之和 18.四数之和 LeetCode 454 四数相加II 题目链接: 454.四数相加II class Soluti ...

最新文章

  1. Python计算数据相关系数(person、Kendall、spearman)
  2. python3 线程_threading模块
  3. Golang入门教程(四)变量声明
  4. vue项目 一行js代码搞定点击图片放大缩小
  5. VPC-阿里云专有网络 Virtual Private Cloud
  6. bcc挖矿用什么_IPFS挖矿与传统传统挖矿的区别
  7. 计算机考研去哪个城市,2019计算机考研:考研热门城市院校排名
  8. 关于文章cisco漏洞4786
  9. Bjui框架--日期选择器
  10. 高斯课堂数电讲义笔记_高斯课堂
  11. PBS常用基本命令------PBS入门
  12. vue cli4接入环信webIM
  13. 爬去网络数据的一般思路
  14. Android 9.0 wifi 热点 汇总
  15. 【Pygame实战】第三版本最终确认——《愤怒的小鸟梦幻爆破》上线回归,爆赞~
  16. matlab dsb调制,幅度调制(AM、DSB、SSB、VSB)
  17. 第八章 磁盘存储器的管理(二)——文件存储空间的管理
  18. 遗传算法之01背包问题 (C语言实现)
  19. [译]什么是FTP MLSD命令
  20. 瑜伽健身app开发的功能作用

热门文章

  1. CentOS7安装MySQL初始密码设置:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:
  2. python中集合的元素可以是任意数据类型_Python数据类型之列表
  3. opencv之计算机视觉介绍(笔记01)
  4. js调用本地js文件(亲测)
  5. python之集合操作
  6. vscode修改c 项目_windows 10上使用vscode编译运行和调试C/C++
  7. python读取linux内存_使用python获取CPU和内存信息(linux系统)
  8. ios签名软件_使用ios企业签名需要准备哪些?
  9. nginx配置一个简单的php网站遇到的问题
  10. axios文件上传 formdata_基于业务场景下的图片/文件上传方案总结