目录

52. 力扣1 两数之和

52.1 题目解析:

52.2 算法思路:

52.3 代码演示:

​编辑

52.4 总结反思:

53 面试题:判定是否互为字符重排

53.1 题目解析:

53.2 算法思路:

53.3 代码演示:

​编辑

53.4 总结反思

54. 力扣217 存在重复元素I

54.1 题目解析:

54.2 算法思路:

54.3 代码演示:

​编辑

54.4总结反思:

55. 力扣219 存在重复的元素II

55.1 题目解析:

​编辑 

55.2 算法思路:

55.3 代码演示:

​编辑

55.4 总结反思

56. 力扣49 字母异位词分组

56.1 题目解析:

​编辑 

56.2 算法思路:

56.3 代码演示:

​编辑

56.4 总结反思:

 

 

 

 

 


今天的算法题是我从暑假写博客以来最简单的一次。废话少说,开启今天的算法题

在此之前,咱们要先讲一下哈希表:

1.哈希表是什么?(哈希表使用方式比较单一),它是存储数据的容器。

2.那么哈希表有啥用呢?快速查找某个元素,基本接近O(1)级别。

3.什么时候用哈希表?当频繁的查找某一个数的时候用哈希表,或者使用二分查找,但是二分查找局限性比较大。你用哈希表是因为哈希表比较快,但是呢,能用二分查找还是用二分查找,因为哈希表是典型的用空间换时间。

4.怎么用哈希表?1.容器(哈希表)2.使用数组模拟简易的哈希表。一般适用于:

【1】字符串中的“字符”,(基本创建一个大小为200的数组空间即可),<index,n[index]>

  【2】数据范围比较小的时候,比如int,1~10^3或4或5,每一个下标对应一个数,但是当出现负数的话,就不建议使用了。

OK,那么关于哈希表的前置知识已经讲完了,那么接下来,就正式的进入咱们今天的讲题阶段

52. 力扣1 两数之和

52.1 题目解析:

本题很简单的题目吧。

52.2 算法思路:

那么这个题目,咱们可以使用暴力枚举来做,不过这个暴力枚举,并不是非常干脆的暴力枚举,还是需要一点智慧的。那么下面我就举个例子,大家看一看。

 

就是固定住一个数字,然后,从这个固定的数字后面去寻找对应的数字即可。那么此时就有两种寻找方式,一个是从前往后,一个是从后往前

优化:

那么咱们对于这种暴力解法,咱们该如何优化呢?

 

优化就是根据前面的暴力解法来进行的优化,由上面的解析可以看出优化的结果。

52.3 代码演示:

vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hash;//<nums[i],i>for (int i = 0; i < nums.size(); i++){int x = target - nums[i];//这个是在哈希表中找到这个数if (hash.count(x)) return { hash[x],i };//这个hash[x],返回的是x的下标。count,如果哈希表中有这个key,就返回1,否则,返回0hash[nums[i]] = i;//如果没有这个数字,那么就存储这个数字,并且存下这个数字的下标,因为上面那行代码需要用到下标}return { -1,-1 };
}
int main()
{vector<int> nums = { 2,7,11,15 };int target = 9;vector<int> outcome = twoSum(nums, target);for (auto& e : outcome){cout << e << "";}cout << endl;return 0;
}

52.4 总结反思:

本题基本就用到咱们之前所讲的那些东西,这里创建哈希表使用unordered_map,是因为这里有key以及val,不只是key

53 面试题:判定是否互为字符重排

53.1 题目解析:

题目也会相当的简单,而且,咱们上面也说了,只要是关于字符串存储的,都可以使用到哈希表

53.2 算法思路:

那么本题就是使用哈希表,使用一个,这里有一个细节,就是遍历s1的字符之后,再遍历s2。如果在s2找到与s1相同的字符,就减一,如果最后减到负数,则返回false。并且若两个字符串长度不相等则直接返回false即可。

53.3 代码演示:

bool CheckPermutation(string s1, string s2) {if (s1.size() != s2.size()) return false;int hash[26] = { 0 };for (auto& e : s1){hash[e - 'a']++;}for (auto& e : s2){hash[e - 'a']--;if (hash[e - 'a'] < 0) return false;}return true;
}
int main()
{string s1("abc");string s2("bca");cout << CheckPermutation(s1, s2) << endl;return 0;
}

53.4 总结反思

基本也是用到了咱们开篇所讲的那些知识

54. 力扣217 存在重复元素I

54.1 题目解析:

这题目更不需要多说

54.2 算法思路:

那么咱们这一题主要就是使用哈希表去完成:

这一道题与那个两数之和的题目策略很像,咱们可以使用那个策略去做,也是使用哈希表,只不过,这一次,只需要有一个key值即可,不需要存val,所以使用unordered_set即可。

54.3 代码演示:

bool containsDuplicate(vector<int>& nums)
{unordered_set<int> hash;for (auto e : nums){if (hash.count(e)) return true;hash.insert(e);}return false;
}
int main()
{vector<int> nums = { 1,2,3,1 };cout << containsDuplicate(nums) << endl;return false;
}

54.4总结反思:

基本的重要的知识,学会运用,做题轻轻松松

55. 力扣219 存在重复的元素II

55.1 题目解析:

 

这个题目与前面的那一个题目很像,只是多了一个条件而已

55.2 算法思路:

由于这个得使用到下标,所以咱们还是使用unordered_map进行创建哈希表

55.3 代码演示:

bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> hash;for (int i = 0; i < nums.size(); i++){if (hash.count(nums[i])){if ((i - hash[nums[i]]) <= k) return true;}hash[nums[i]] = i;}return false;
}
int main()
{vector<int> nums = { 1,2,3,1 };int k=3;cout << containsNearbyDuplicate(nums, k) << endl;return 0;
}

55.4 总结反思

那么大体的思路基本就是这样,大家还是得利用好前面的知识才可以

56. 力扣49 字母异位词分组

56.1 题目解析:

 

这个题目很简单,就是具有相同的字母的字符串就可以合成一组异位词。

56.2 算法思路:

这个还是得使用哈希表,1.判断两个字符是否为字母异位词,排序

2.然后就是如何分组?<string,string[]>,第二个存的是字符数组。例如,"aet","tea"若字符串中有这个字母,那么加入到字符串数组即可

即val就是咱们所要的结果

56.3 代码演示:

vector<vector<string>> groupAnagrams(vector<string>& strs)
{unordered_map<string, vector<string>> hash;// 1. 把所有的字⺟异位词分组for (auto& s : strs){string tmp = s;sort(tmp.begin(), tmp.end());hash[tmp].push_back(s);}// 2. 结果提取出来vector<vector<string>> ret;for (auto& [x, y] : hash){ret.push_back(y);}return ret;
}
int main()
{vector<string> str = { "eat", "tea", "tan", "ate", "nat", "bat" };vector<vector<string>> outcome = groupAnagrams(str);for (auto& e : outcome){for (auto& x : e){cout << x << "";}cout << endl;}return 0;
}

56.4 总结反思:

基本今天的题目就是这些,算是比较简单的。

本篇完.................... 

 

 

 

 

 

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

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

相关文章

MySQL时间处理完全指南:从存储到查询优化

时间是数据库中最活跃的数据维度之一&#xff0c;正确处理时间数据关系到系统稳定性、数据分析准确性和业务逻辑正确性。本文将深入剖析MySQL时间处理的完整知识体系。一、MySQL时间数据类型详解1. 核心时间类型对比类型存储空间范围特性时区影响DATE3字节1000-01-01~9999-12-3…

Text2SQL 智能问答系统开发-预定义模板(二)

背景 在构建一个支持多轮对话的 Text2SQL 系统过程中&#xff0c;我完成了以下关键功能&#xff1a; 已完成 基础 Text2SQL 功能实现 实现用户输入自然语言问题后&#xff0c;系统能够自动生成 SQL 并执行返回结果。用户交互优化 支持用户通过补充信息对查询进行调整&#xff0…

JavaScript 异步编程:Promise 与 async/await 详解

一、Promise 1. 什么是 Promise&#xff1f; Promise 是 JavaScript 中用于处理异步操作的对象&#xff0c;它代表一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。 2. Promise 的三种状态 ​​Pending&#xff08;待定&#xff09;​​&#xff1a;初始状态…

OS架构整理

OS架构整理引导启动部分bios bootloader区别启动流程&#xff08;x86 BIOS 启动&#xff09;&#xff1a;biosboot_loader3.切换进保护模式实模式的限制如何切换进保护模式加载kernel到内存地址1M加载内核映像文件elf一些基础知识链接脚本与代码数据段创建GDT表段页式内存管理显…

【WRF-Chem第二期】WRF-Chem有关 namelist 详解

目录namelist 选项&#xff1a;chem_opt 的选择其他化学相关的 namelist 选项气溶胶光学属性与输出边界与初始条件配置&#xff08;气体&#xff09;参考本博客详细介绍 WRF-Chem有关 namelist 选项。 namelist 选项&#xff1a;chem_opt 的选择 chem_opt 是什么&#xff1f;…

STM32-USART串口实现接收数据三种方法(1.根据\r\n标志符、2.空闲帧中断、3.根据定时器辅助接收)

本章概述思维导图&#xff1a;USART串口初始化配置串口初始化配置在&#xff08;STM32-USART串口初始化章节有详细教程配置&#xff09;&#xff0c;本章不做讲解直接代码示例&#xff0c;本章重点在于串口实现接收数据三种方法&#xff1b;配置USART1串口接收初始化函数步骤&a…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论数据可视化分析-点赞区间折线图实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解微博评论数据可视化分析-点赞区间折线图实现…

Unity_SRP Batcher

SRP Batcher 全面解析&#xff1a;原理、启用、优化与调试一、什么是 SRP Batcher&#xff1f;SRP Batcher 是 Unity Scriptable Render Pipeline&#xff08;URP、HDRP 或自定义 SRP&#xff09; 专属的 CPU 渲染性能优化技术&#xff0c;核心目标是 减少材质切换时的 CPU 开销…

详解Vite 配置中的代理功能

在前端开发过程中&#xff0c;你可能经常会遇到一个头疼的问题&#xff1a;当你在本地启动的前端项目中调用后端接口时&#xff0c;浏览器控制台会报出类似 “Access to fetch at ‘http://xxx’ from origin ‘http://localhost:3000’ has been blocked by CORS policy” 的错…

理解梯度在神经网络中的应用

梯度&#xff08;Gradient&#xff09;是微积分中的一个重要概念&#xff0c;广泛应用于机器学习和深度学习中&#xff0c;尤其是在神经网络的训练过程中。下面将从梯度的基本概念、其在神经网络中的应用两个方面进行详细介绍。一、梯度的基本概念 1.1 什么是梯度&#xff1f; …

WPF,按钮透明背景实现MouseEnter

在帮手程序&#xff08;assister.exe&#xff09;中&#xff0c;可以点击录制按钮&#xff0c;实现录制用户操作直接生成操作列表。而在弹出录制按钮的悬浮窗中&#xff0c;需要能够拖动录制按钮放置在任意的位置&#xff0c;以免阻挡正常的窗口。具体功能是&#xff0c;当鼠标…

【抄袭】思科交换机DAI(动态ARP监控)配置测试

一.概述 1.DAI作用 ①.使用DAI&#xff0c;管理员可以指定交换机的端口为信任和非信任端口&#xff1a; 信任端口可以转发任何ARP信息 非信任端口的ARP消息要进行ARP检测验证 ②.交换机执行如下的ARP验证&#xff1a; 静态ARP监控&#xff1a;为一个静态的IP地址配置一个静态AR…

在嵌入式系统或 STM32 平台中常见的外设芯片和接口

在嵌入式系统或 STM32 平台中常见的 外设芯片 或 模块名称&#xff0c;包括&#xff1a; &#x1f4fa; 显示驱动&#xff08;如 ST7735、OTM8009A、NT35510&#xff09;&#x1f4f7; 摄像头模组&#xff08;如 OV5640、OV9655、S5K5CAG&#xff09;&#x1f4be; Flash 存储器…

AI 类型的 IDE

指集成了 AI 辅助编程能力的集成开发环境 一、代码辅助生成 ✅ 自动补全&#xff08;更智能&#xff09; 比传统 IDE 更智能&#xff0c;理解上下文&#xff0c;生成整个函数/模块 示例&#xff1a;根据函数名 calculateTax 自动生成税务计算逻辑 ✅ 函数 / 类自动生成 给…

JP3-3-MyClub后台后端(一)

Java道经 - 项目 - MyClub - 后台后端&#xff08;一&#xff09; 传送门&#xff1a;JP3-1-MyClub项目简介 传送门&#xff1a;JP3-2-MyClub公共服务 传送门&#xff1a;JP3-3-MyClub后台后端&#xff08;一&#xff09; 传送门&#xff1a;JP3-3-MyClub后台后端&#xff08;…

架构实战——互联网架构模板(“存储层”技术)

目录 一、SQL 二、NoSQL 三、小文件存储 四、大文件存储 本文来源:极客时间vip课程笔记 一、SQL SQL 即我们通常所说的关系数据。前几年 NoSQL 火了一阵子,很多人都理解为 NoSQL 是完全抛弃关系数据,全部采用非关系型数据。但经过几年的试验后,大家发现关系数据不可能完全被…

CentOS7.9在线部署Dify

一、CentOS7.9安装dify 二、检查是否安装dcoker docker --version2.1下载后将安装包上传至服务器对应文件夹下,我选在放在了 /root文件夹下 cd /root2.2 上传至服务器 cd /root #对应目录下tar -xvf docker-26.1.4.tgz # 解压安装包:chmod 755 -R docker # 赋予可执…

深入浅出C语言指针:从数组到函数指针的进阶之路(中)

指针是C语言的灵魂&#xff0c;也是初学者最头疼的知识点。它像一把锋利的刀&#xff0c;用得好能大幅提升代码效率&#xff0c;用不好则会让程序漏洞百出。今天这篇文章&#xff0c;我们从数组与指针的基础关系讲起&#xff0c;一步步揭开指针进阶类型的神秘面纱&#xff0c;最…

java web Cookie处理

java web 设置cookie更改启动端口// Directory tree (5 levels) ├── src\ │ ├── a.txt │ └── com\ │ └── zhang\ │ └── ServletContext\ │ ├── cookie\ │ └── servletContext.java └── web\├─…

机器学习—线性回归

一线性回归线性回归是利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。相关关系&#xff1a;包含因果关系和平行关系因果关系&#xff1a;回归分析【原因引起结果&#xff0c;需要明确自变量和因变量】平行关系&#xff1…