LeetCode刷题解析:两数之和与两数相加
28 浏览量
更新于2024-09-01
收藏 280KB PDF 举报
"这篇刷题笔记主要涵盖了LeetCode上的三道经典问题:两数之和、两数相加以及寻找两个有序数组的中位数。文章通过实例解析和代码实现来详细阐述解题思路和方法。"
在LeetCode的算法挑战中,"两数之和"是一个基础但重要的问题。给定一个整数数组`nums`和一个目标值`target`,我们需要找到数组中两个数,使得它们的和等于`target`。关键在于,每个数只能使用一次,因此不能简单地使用两重循环。这个问题可以通过哈希映射来解决。
解答如下:
```java
private static int[] twoSum(int[] nums, int target) {
int[] indexs = new int[2];
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
indexs[0] = i;
indexs[1] = map.get(nums[i]);
return indexs;
}
map.put(target - nums[i], i);
}
return indexs;
}
```
分析这个解决方案,我们首先创建一个长度为2的数组`indexs`用于存储结果下标,以及一个HashMap`map`来存储数组元素及其索引。在遍历数组的过程中,检查当前元素是否已存在于HashMap中,如果存在,说明已经找到了匹配的数,返回下标;否则,将目标值与当前元素的差值作为键,当前元素的索引作为值存入HashMap。这种方法的时间复杂度为O(n),空间复杂度也为O(n)。
另一道题目是"两数相加",它要求我们将两个用链表表示的逆序存储的非负整数相加。链表节点只存储单个数字,且不以0开头。这个问题可以通过模拟加法运算的过程来解决,同时处理进位。
解答如下:
```java
private ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode root = new ListNode(0);
ListNode cursor = root;
int carry = 0;
while (l1 != null || l2 != null || carry != 0) {
int l1Val = l1 != null ? l1.val : 0;
int l2Val = l2 != null ? l2.val : 0;
int sum = l1Val + l2Val + carry;
carry = sum / 10;
cursor.next = new ListNode(sum % 10);
cursor = cursor.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
return root.next;
}
```
在这个解法中,我们创建一个新的链表`root`,并初始化一个进位变量`carry`。然后,我们在循环中逐步处理两个链表的每个节点,计算当前位的和,更新进位,创建新节点并将其添加到结果链表中。当两个输入链表都遍历完并且没有进位时,返回结果链表的下一个节点(即跳过起始的0节点)。
这些题目旨在训练程序员的数据结构操作技巧和逻辑思维能力,是提升算法水平的绝佳实践。通过不断练习和理解,可以在面对类似问题时快速找到高效解决方案。
2021-11-23 上传
2021-07-05 上传
2021-08-10 上传
2021-02-21 上传
2021-04-06 上传
2021-06-30 上传
2021-06-30 上传
2021-03-21 上传
2021-07-06 上传
weixin_38730840
- 粉丝: 2
- 资源: 968
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库