【LeetCode 热题 HOT 100】题解笔记 —— Day01

❤ 作者主页:欢迎来到我的技术博客😎
❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~*
🍊 如果文章对您有帮助,记得关注点赞收藏评论⭐️⭐️⭐️
📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉

文章目录

  • 一、两数之和
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 二、两数相加
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 三、无重复字符的最长子串
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 四、寻找两个正序数组的中位数
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 五、最长回文子串
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 六、正则表达式匹配
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 七、盛最多水的容器
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 八、三数之和
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 九、电话号码的字母组合
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 十、删除链表的倒数第 N 个结点
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现

一、两数之和

1. 题目描述

在这里插入图片描述


2. 思路分析

最容易想到的方法是枚举数组中的每一个数 x x x,寻找数组中是否存在 t a r g e t − x target - x targetx

使用哈希表,可以将寻找 t a r g e t − x target - x targetx 的时间复杂度降低到从 O ( N ) O(N) O(N) 降低到 O ( 1 ) O(1) O(1)

循环一遍nums数组,在每步循环中做两件事:
1、判断 target - nums[i] 是否出现在哈希表中;
2、将 nums[i] 插入到哈希表中。


3. 代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> heap;for (int i = 0; i < nums.size(); i ++) {int r = target - nums[i];if (heap.count(r)) return {heap[r], i};heap[nums[i]] = i;}return {};}
};

二、两数相加

1. 题目描述

在这里插入图片描述


2. 思路分析

(模拟人工加法) O(n)
这是一道模拟题,直接模拟列竖式做加法的过程:

  1. 从最低位至最高位,逐位相加,如果大于和等于10,则保留个位数字,同时向前一位加1;
  2. 如果最高位有进位,则需在最前面补1。

列表的题目,有个常见的技巧:
添加一个虚拟头结点:ListNode *head = new ListNode(-1);,这样可以简化边界情况的判断。

时间复杂度:由于总共共扫描一遍,所以时间复杂度是O(n)。


3. 代码实现

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {auto dummy = new ListNode(-1), cur = dummy;int t = 0;while (l1 || l2 || t) {if (l1) t += l1->val, l1 = l1->next;if (l2) t += l2->val, l2 = l2->next;cur = cur->next = new ListNode(t % 10);t /= 10;}return dummy->next;}
};

三、无重复字符的最长子串

1. 题目描述

在这里插入图片描述


2. 思路分析

定义两个指针 i , j ( i < = j ) i,j(i <= j) i,j(i<=j), 表示当前扫描到的子串是 [ i , j ] [i,j] [i,j](闭区间)。扫描过程中维护一个哈希表unorderes_map<char, int> hash, 表示 [ i , j ] [i,j] [i,j] 中每个字符出现的个数。

线性扫描,每次循环的流程如下:

  1. 指针 j j j 向后移一位,同时将哈希表中 s [ j ] s[j] s[j] 的计数加一:hash[s[j]] ++;
  2. 假设 j j j 移动前的区间 [ i , j ] [i,j] [i,j] 中没有重复字符,则 j j j 移动后,只有 s [ j ] s[j] s[j] 可能出现2次。因此我们不断向后移动 i i i,直至区间 [ i , j ] [i,j] [i,j] s [ j ] s[j] s[j] 的个数等于1为止。

3. 代码实现

class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_map<char, int> heap;int res = 0;for (int i = 0, j = 0; i < s.size(); i ++) {            heap[s[i]] ++;while (heap[s[i]] > 1) heap[s[j ++]] --;res = max(res, i - j + 1);}return res;}
};

四、寻找两个正序数组的中位数

1. 题目描述

在这里插入图片描述


2. 思路分析

3. 代码实现


五、最长回文子串

1. 题目描述

在这里插入图片描述


2. 思路分析

暴力枚举 O( 2 2 2^2 22)
首先枚举回文串的中心 i i i,然后分两种情况向两边扩展,直到遇到不同字符为止:

  • 回文串长度是奇数,则依次判断 s [ i − k ] = = s [ i + k ] , k = 1 , 2 , 3..... s[i - k] == s[i + k], k = 1, 2,3..... s[ik]==s[i+k],k=1,2,3.....
  • 回文串长度是偶数,则依次判断 s [ i + k ] = = s [ i + k − 1 ] , k = 1 , 2 , 3.... s[i + k] == s[i + k - 1], k = 1, 2, 3.... s[i+k]==s[i+k1],k=1,2,3....

如果遇到不同字符,则我们找到了以 i i i 为中心的回文字符串边界。


3. 代码实现

class Solution {
public:string longestPalindrome(string s) {string res;for (int i = 0; i < s.size(); i ++ ) {int l = i - 1, r = i + 1;while (l >= 0 && r < s.size() && s[l] == s[r]) l --, r ++;if (res.size() < r - l - 1) res = s.substr(l + 1, r - l - 1);l = i, r = i + 1;while (l >= 0 && r < s.size() && s[l] == s[r]) l --, r ++;if (res.size() < r - l - 1) res = s.substr(l + 1, r - l - 1);}return res;}
};

六、正则表达式匹配

1. 题目描述

在这里插入图片描述


2. 思路分析

3. 代码实现


七、盛最多水的容器

1. 题目描述

在这里插入图片描述


2. 思路分析

  1. 初始化: 双指针 i i i j j j分别指向水槽的左右两端;
  2. 循环收窄: 直至双指针相遇时跳出;
    1. 更新面积最大值 r e s res res
    2. 选定两板高度中的短板,向中间收窄一格;
  3. 返回值: 返回面积最大值 r e s res res 即可。

3. 代码实现

class Solution {
public:int maxArea(vector<int>& height) {int res = 0;for (int i = 0, j = height.size() - 1; i < j;) {res = max(res, min(height[i], height[j]) * (j - i));if (height[i] > height[j]) j --;else i ++; } return res;}
};

八、三数之和

1. 题目描述

在这里插入图片描述


2. 思路分析

双指针算法 O ( n 2 ) O(n^2) O(n2)

  1. 枚举每个数,先确定 n u m s [ i ] nums[i] nums[i],在排序后的情况下,通过双指针 j j j k k k 分别从左边 j = i + 1 j = i + 1 j=i+1 和右边 k = n − 1 k = n - 1 k=n1 往中间靠拢,找到 n u m s [ i ] + n u m s [ j ] + n u m s [ k ] = = 0 nums[i] + nums[j] + nums[k] == 0 nums[i]+nums[j]+nums[k]==0 的所有符合条件的搭配;
  2. 判重处理:i > 0(i不是第一个数) && nums[i] == nums[i - 1],表示当前确定好的数与上一个一样,需要直接 o n t i n u e ontinue ontinue,同理,j && nums[j] == nums[j-1] 需要直接 c o n t i n u e continue continue;
  3. while(j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= 0) k -- //要找到满足最小的 k k k
    为什么 j < k − 1 j < k - 1 j<k1
    试探法,如果 k k k 的下一个数( k k k的左边的数)满足就用下一个数。

3. 代码实现

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;sort(nums.begin(), nums.end());for (int i = 0; i < nums.size(); i ++ ) {if (i && nums[i] == nums[i - 1]) continue;for (int j = i + 1, k = nums.size() - 1; j < k; j ++ ) {if (j > i + 1 && nums[j] == nums[j - 1]) continue;while (j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= 0) k --;if (nums[i] + nums[j] + nums[k] == 0) {res.push_back({nums[i], nums[j], nums[k]});}}}return res;}
};

九、电话号码的字母组合

1. 题目描述

在这里插入图片描述


2. 思路分析

  • 这是个排列组合问题,这个排列组合可以用树的形式表示出来;
  • 当给定了输入字符串,比如:“23”,那么整棵树就构建完成了,如下:
    在这里插入图片描述
  • 问题转化成了从根节点到空节点一共有多少条路径。

3. 代码实现

class Solution {
public:vector<string> ans;string strs[10] = {"", "", "abc", "def","ghi", "jkl", "mno","pqrs", "tuv", "wxyz",};vector<string> letterCombinations(string digits) {if (digits.empty()) return ans;dfs(digits, 0, "");return ans;}void dfs(string& digits, int u, string path) {if (u == digits.size()) ans.push_back(path);else {for (auto c : strs[digits[u] - '0']) dfs(digits, u + 1, path + c);}}
};

十、删除链表的倒数第 N 个结点

1. 题目描述

在这里插入图片描述


2. 思路分析

(两次遍历) O ( L ) O(L) O(L)

  1. 第一次遍历求出链表的长度。
  2. 第二次遍历删掉指定结点。

3. 代码实现

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {auto dummy = new ListNode(-1);dummy->next = head;int len = 0;for (auto p = dummy; p; p = p->next) len ++;auto p = dummy;for (int i = 0; i < len - n - 1; i ++) p = p->next;p->next = p->next->next;return dummy->next;}
};

 
非常感谢您阅读到这里,如果这篇文章对您有帮助,希望能留下您的点赞👍 关注💖 分享👥 留言💬thanks!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业海外分部,如何实现安全稳定的跨境网络互连?

如今&#xff0c;众多企业广泛采取数字化业务系统&#xff0c;如OA、ERP及CRM等&#xff0c;来提升其业务运营效率。同时&#xff0c;私有云与公有云混合架构也逐渐普及化。 具体来说&#xff0c;很多企业选择将研发系统部署在公司本地的私有云环境&#xff0c;以此确保数据安全…

首批!创邻科技入选《图数据库金融应用场景优秀案例》

11月11日&#xff0c;“全球金融科技中心网络年会”在第三届全球金融科技大会暨第五届成方金融科技论坛上成功在京举办。会上&#xff0c;北京前沿金融监管科技研究院发布了基于国际标准组织——国际关联数据基准委员会&#xff08;LDBC&#xff09;的《图数据库金融应用场景优…

路由器DHCP分配IP地址规则

路由器DHCP分配IP地址的机制&#xff1a; 先设置一个IP地址池&#xff0c;假设是192.168.1.100-192.168.1.199一共100个。 来一个请求&#xff0c;看一下是不是以前请求过的地址&#xff0c;如果是&#xff0c;还是返回以前给过的IP&#xff0c;然后将到期时间(有些路由器默认…

【Python3】【力扣题】349. 两个数组的交集

【力扣题】题目描述&#xff1a; 【Python3】代码&#xff1a; 1、解题思路&#xff1a;集合的交集。两个数组都转为集合&#xff0c;获取集合的交集。 知识点&#xff1a;set(...)&#xff1a;转为集合&#xff0c;集合的元素不重复。 集合1.intersection(集合2)&#xff1a…

Python3.7 win7系统安装openCV方案

为了使用机房电脑处理数字图像问题&#xff0c;在win7系统安装了python opencv, 测试使用的是官网下载python3.7.7版本&#xff0c;如果官网安装&#xff0c;直接安装即可 pip install python-opencv 这样会自动安装对应版本的numpy 如果官网安装很慢&#xff0c;想使用镜像安…

【Linux】EVIOCGBIT

EVIOCGBIT(ev, len) 该怎么理解&#xff1f; 我们可以推断出&#xff0c;它是一个宏&#xff0c;它的前两个参数已经确定了&#xff0c;具体的功能由后两个参数(ev,len)来决定。Linux-4.9.88\include\uapi\linux\input.h #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, E, 0x20 …

如何申请文心一言文心千帆大模型API调用资格、获取access_token,并使用SpringBoot接入文心一言API

前段时间&#xff0c;百度文心一言&文心千帆大模型开放了API调用的测试&#xff0c;接下来&#xff0c;教大家申请测试资格并接入文心千帆大模型的API。 一、文心一言&文心千帆的测试资格申请 1. 确保拥有一个百度智能云的账号 右上角点击注册&#xff0c;内容如实填…

【知网稳定检索】第九届社会科学与经济发展国际学术会议 (ICSSED 2024)

第九届社会科学与经济发展国际学术会议 (ICSSED 2024) 2024 9th International Conference on Social Sciences and Economic Development 第九届社会科学与经济发展国际学术会议(ICSSED 2024)定于2024年3月22-24日在中国北京隆重举行。会议主要围绕社会科学与经济发展等研究…

postgresql从入门到精通 - 第35讲:中间件PgBouncer部署|PostgreSQL教程

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第35讲&#…

荆涛《春节回家》:歌声中的年味与乡愁

荆涛《春节回家》&#xff1a;歌声中的年味与乡愁春节&#xff0c;对于每一个中国人来说&#xff0c;都是一年中最为重要的时刻。它不仅仅是一个节日&#xff0c;更是团圆、乡愁、回忆与希望的象征。歌手荆涛的歌曲《春节回家》恰恰捕捉到了这些情感&#xff0c;用音乐为人们绘…

hdlbits系列verilog解答(Exams/m2014 q4e)-46

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (input in1,input in2,output out);assign out ~(in1 | in2);endmodule三、仿真结果 转载请注明出处&#xff01;

【SpringBoot系列】SpringBoot日志配置

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

hdlbits系列verilog解答(exams/m2014_q4i)-45

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (output out);assign out 1b0;endmodule三、仿真结果 转载请注明出处&#xff01;

【C++】哈希(位图、布隆过滤器)

一、哈希的应用&#xff08;位图和布隆过滤器&#xff09; 1、位图&#xff08;bitset&#xff09; &#xff08;1&#xff09;位图概念 【题目】 给 40亿 个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这 40亿 个数中。…

mysql 行转列 GROUP_CONCAT 试验

1.概要 很多时候需要用到行专列的方式做数据分析。比如对通讯数据的采集 数据采集结果如下&#xff1a; 变量值采集周期131251132272 我想要看的结果 变量1变量2采集周期351372 就是我想看到相关数据的周期变化情况。 2.试验 2.1创建数据如下&#xff08;表名 tb5&…

发现有一个会Python的男友魅力值杠杠的!!!

Python能做什么&#xff1f; 可以做日常任务&#xff0c;比如自动备份你的MP3&#xff0c;可以做网站&#xff0c;很多著名的网站像知乎、YouTube就是Python写的&#xff0c; 可以做网络游戏的后台&#xff0c;很多在线游戏的后台都是Python开发的。 上面说的这些本人并没有实…

第98步 深度学习图像目标检测:SSD建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;SSD&#xff08;Single Shot MultiBox Detector&#xff09;模型。 二、SSD简介 SSD&#xff08;Single Shot MultiBox Detector&#xff09;是一种流行的目标检…

.netcore 获取appsettings

我的开发环境是abpvnext net6.0 。 因为业务需要&#xff0c;从原来老项目net4.5工程里复制了一个报表导出的业务类到net6项目里面&#xff0c;但是他的获取appsettings的代码其实不用想都知道会报错。因为原来framwork时代获取appsettings的方法常见的是 System.Configura…

Dubbo配置注册中心设置application的name使用驼峰命名法可能存在的隐藏启动异常问题

原创/朱季谦 首先&#xff0c;先提一个建议&#xff0c;在SpringBootDubbo项目中&#xff0c;Dubbo配置注册中心设置的application命名name的值&#xff0c;最好使用xxx-xxx-xxx这样格式的&#xff0c;避免随便使用驼峰命名。因为使用驼峰命名法&#xff0c;在Spring的IOC容器…

Java核心知识点整理大全13-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…