【LeetCode面试TOP100】力扣打卡第一天!

news/2024/12/5 4:43:10/

✨哈喽,进来的小伙伴们,你们好耶!✨

🛰️🛰️系列专栏:【LeetCode面试TOP100】

✈️✈️本篇内容:力扣Top100——第1,2题!

🚀🚀代码存放仓库gitee:力扣面试Top100题!

⛵⛵作者简介:一名双非本科大三在读的科班Java编程小白,道阻且长,星夜启程!

 注:每道题的题目就是对应原题的链接,大家可以点过链接直接就可以做题啦!

1. 两数之和

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

解法一:暴力枚举

我们可以罗列出数组中的每一个数 x,然后遍历数组查找是否存在 target - x。

当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在 x 后面的元素中寻找 target - x。

class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {if (nums[i] + nums[j] == target) {return new int[]{i, j};}}}return new int[0];}
}

复杂度分析:

 时间复杂度:O(N^2),其中 NN 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。

 空间复杂度:O(1)。

刚才这种解法很直观,看起来也通俗易懂,但是作为咋们专业写代码的同志们来说,做算法题肯定是要考虑到时间复杂度和空间复杂度这个问题的,上述代码的时间复杂度是O(n^2),可以看出时间复杂度非常高,那么有没有简单一点的算法呢?

解法二:哈希表

使用哈希表,可以将寻找 target - x 的时间复杂度降低到从 O(N) 降低到 O(1)。

这样我们创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();for (int i = 0; i < nums.length; ++i) {if (hashtable.containsKey(target - nums[i])) {return new int[]{hashtable.get(target - nums[i]), i};}hashtable.put(nums[i], i);}return new int[0];}
}

复杂度分析:

时间复杂度:O(N),其中 NN 是数组中的元素数量。对于每一个元素 x,我们可以 O(1) 地寻找 target - x。

空间复杂度:O(N),其中 NN 是数组中的元素数量。主要为哈希表的开销。

2. 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

示例 1:

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

思路:

这题的话是链表逆序排列的,并且每个节点都只存储了一位数字,常规思路遍历L1,L2,将对应位置的数加起来,然后判断有无进位,有的话在额外定义一个变量tmp,用来存储进位,L1,L2可能长度不是一样的,那么就需要在while()循环里面再次判断谁先走完,假如L1先遍历完,那么就继续遍历L2,那么我们这里需要额外定义一个虚拟节点,然后定义一个节点cur等于这个虚拟节点,让cur去动起来,最后返回我们的虚拟节点的next节点便是结果的表头节点,注意最后的进位如果 tmp>0,则需要在额外定义一个新的节点cur.next = new ListNode(tmp)即可。

class Solution {public ListNode addTwoNumbers(ListNode L1, ListNode L2) {ListNode visual = new ListNode();ListNode cur = visual;int tmp = 0;while(L1 != null || L2!=null){int s1 = 0,s2 = 0;s1 = L1 == null?0:L1.val;s2 = L2 == null?0:L2.val;int sum = s1+s2+tmp;cur.next = new ListNode(sum%10);cur = cur.next;tmp = sum/10;if(L1 != null){L1 = L1.next;}if(L2 != null){L2 = L2.next;}}if(tmp != 0) cur.next = new ListNode(tmp);return visual.next;}
}

复杂度分析:

时间复杂度:O(max(m,n)),其中 m 和 n 分别为两个链表的长度。我们要遍历两个链表的全部位置,而处理每个位置只需要 O(1)的时间。

空间复杂度:O(1)。

OK,那么今天的LeetCode打卡就结束了,最近准备持续学习数据结构并且刷题的小伙伴们可以一起打卡LeetCodeTop100题丫!!

 


http://www.ppmy.cn/news/9697.html

相关文章

12.动态内存

文章目录动态内存12.1动态内存和智能指针12.1.1shared_ptr类make_shared函数shared_ptr的拷贝和赋值shared_ptr自动销毁所管理的对象shared_ptr还自动释放相关联的内存使用了动态生存期的资源的类12.1.2直接管理内存使用new动态分配和初始化对象动态分配的const对象内存耗尽指针…

java基础 定时器

方式一&#xff1a;Timer TimerTask类实际上是实现了Runnable。 Timer定时器的特点和存在的问题&#xff1a; 1、Timer是单线程&#xff0c;处理多个任务按照顺序执行&#xff0c;存在延时与设置定时器的时间有出入。 2、由于单线程特性&#xff0c;一旦其中的某个任务抛出异…

(02)Cartographer源码无死角解析-(46) 2D栅格地图→CastRay()函数与贝汉明(Bresenham)算法

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

分享136个PHP源码,总有一款适合您

PHP源码 分享136个PHP源码&#xff0c;总有一款适合您 136个PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1A5sR357dh_SlS7pu33lW1Q?pwdkzgn 提取码&#xff1a;kzgn import os# 查找指定文件夹下所有相同名称的文件 def search_file(dirPath, fileName):dirs os…

hevc/h264 预测编码的原理

预测编码预测编码是视频编码中的核心技术之一&#xff0c;对于视频信号来说&#xff0c;一副图像内临近的像素之间有着比较强的相关性&#xff0c;相邻图像之间也有很强的时间相关性。因此&#xff0c;先进的视频编码往往采用帧内预测和帧间预测的方式&#xff0c;使用图像内已…

[Linux_]make/Makefile

[Linux_]make/Makefile 心有所向&#xff0c;日复一日&#xff0c;必有精进专栏&#xff1a;《Linux_》作者&#xff1a;沂沐沐目录 [Linux]make/Makefile 前言 一、Mikefile 二、如何写Mikefile文件 三、原理 四、项目清理 报错&#xff1a;missing separator 前言 一个工…

Springboot Controller接口默认自动填充 业务实体参数值

前言 今天看有小伙伴求救&#xff1a; 我还是一贯如此&#xff0c; 有人不明白&#xff0c;没玩过HandlerMethodArgumentResolver 。 那么很可能不止他一个人&#xff0c; 那么我就有必要出手。 不多说&#xff0c;开搞。 正文 快速模拟出这个使用场景 &#xff1a; 假如有好多…

图像处理:二值掩膜影像去噪与边缘强化

前言这篇博客主要解决的一个问题是掩膜图像的噪声去除和边缘强化&#xff0c;如下图1所示。可以看到掩膜图像上有很多的斑点噪声&#xff0c;而且掩膜的轮廓也不够清晰。所以我们的目标就是一方面尽可能把这些斑点噪声去除&#xff0c;另一方面尽量突出掩膜边界。另外处理后的掩…