LeetCode 热题 100 (尽量ACM模式刷) 持续更新!!!

LeetCode 热题 100
哈希hash
1 两数之和

/** 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。* 你可以按任意顺序返回答案。*/
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;vector<int> twoSum(vector<int>& nums, int target)
{unordered_map<int, int> map;for (int i = 0; i < nums.size(); i++){auto iter = map.find(target - nums[i]);if (iter != map.end()) {return {iter->second, i};}map.insert(pair<int, int>(nums[i], i));}return {};
}int main()
{vector<int> nums = {2, 7, 11, 15};int target = 0;cin >> target;vector<int> result = twoSum(nums, target);for (auto a : result) {cout << a << ' ';}return 0;
}

2 字母异位词分组
思路:由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。

/** 给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。* 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。*/#include <string>
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>using namespace std;
vector<vector<string>> groupWord(vector<string>& strs) {unordered_map<string, vector<string>> map;for (auto a : strs) {string key = a;sort(key.begin(), key.end());map[key].emplace_back(a);}vector<vector<string>> ans;for (auto iter = map.begin(); iter != map.end(); iter++) {ans.emplace_back(iter->second);}return ans;
}
int main()
{vector<string> s = {"eat", "tea", "tan", "ate", "nat", "bat"};vector<vector<string>> result = groupWord(s);for (auto a : result) {for (auto b : a) {cout << b << ' ';}cout << endl;}return 0;
}

复杂度分析
(1)时间复杂度: O ( n k l o g ( k ) ) O(nklog(k)) O(nklog(k))
(2)空间复杂度: O ( n k ) O(nk) O(nk)
3 最长连续序列
在这里插入图片描述

/** 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。* 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。*/
#include <iostream>
#include <unordered_set>
#include <vector>using namespace std;
int longestS(vector<int>& nums) {int res = 0;int subLength = 0;unordered_set<int> nums_set(nums.begin(), nums.end());for (auto num : nums_set) {if (!nums_set.count(num - 1)) {subLength = 1;while (nums_set.count(++num)) subLength++;res = max(res, subLength);}}return res;
}int main()
{vector<int> nums = {100,4,200,1,3,2};cout << longestS(nums) << endl;return 0;
}

双指针
1 移动零

/** 给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。* 请注意 ,必须在不复制数组的情况下原地对数组进行操作。*/
#include <iostream>
#include <vector>using namespace std;
void moveZeros(vector<int>& nums) {int slow = 0;for (int fast = 0; fast < nums.size(); fast++) {if (nums[fast] != 0) {swap(nums[slow++], nums[fast]);}}
}
int main()
{vector<int> nums = {0,1,0,3,12};moveZeros(nums);for (auto i : nums) {cout << i << ' ';}return 0;
}

2 盛最多水的容器

/** 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。* 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。* 返回容器可以储存的最大水量。* 说明:你不能倾斜容器。*/
#include <iostream>
#include <limits>
#include <vector>
using namespace std;int maxArea(vector<int> heights) {int left = 0;int right = heights.size() - 1;int res = INT_MIN;while (left < right) {if (heights[left] < heights[right]) {res = max(res, (right - left) * heights[left]);left++;} else {res = max(res, (right - left) * heights[right]);right--;}}return res;
}
int main()
{vector<int> heights = {1,8,6,2,5,4,8,3,7};cout << maxArea(heights) << endl;return 0;
}

3 三数之和

/** 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请* 你返回所有和为 0 且不重复的三元组。* 注意:答案中不可以包含重复的三元组。*/
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;
vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> result;sort(nums.begin(), nums.end());for (int i = 0; i < nums.size(); i++) {if (nums[i] > 0) return result;if (i > 0 && nums[i] == nums[i - 1]) continue;int left = i + 1;int right = nums.size() - 1;while (left < right) {if (nums[i] + nums[left] + nums[right] > 0) right--;else if (nums[i] + nums[left] + nums[right] < 0) left++;else {result.push_back(vector<int>{nums[i], nums[left], nums[right]});while (left < right && nums[left] == nums[left + 1]) left++;while (left < right && nums[right] == nums[right - 2]) right--;left++;right--;}}}return result;
}int main()
{vector<int> nums = {-1,0,1,2,-1,-4};vector<vector<int>> res = threeSum(nums);for (auto a : res) {for (auto b : a) {cout << b << ' ';}cout << endl;}
}

4 接雨水

/** 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。*/
#include <iostream>
#include <vector>using namespace std;int trap(vector<int>& height) {int sum = 0;for (int i = 0; i < height.size(); i++) {if (i == 0 || i == height.size() - 1) continue;int left = height[i];int right = height[i];for (int j = i - 1; j >= 0; j--) {if (left < height[j]) left = height[j];}for (int j = i + 1; j < height.size(); j++) {if (right < height[j]) right = height[j];}int h = min(left, right) - height[i];if (h > 0) sum += h;}return sum;
}
int main()
{vector<int> height = {0,1,0,2,1,0,1,3,2,1,2,1};cout << trap(height) << endl;return 0;
}

二叉树
1 二叉树的中序遍历

class Solution {
public:void traversal(TreeNode* node, vector<int>& vec) {if (node == NULL) return;if (node->left) traversal(node->left, vec);vec.push_back(node->val);if (node->right) traversal(node->right, vec);}vector<int> inorderTraversal(TreeNode* root) {vector<int> result;traversal(root, result);return result;}
};

2 二叉树的最大深度
递归法:

class Solution {
public:int maxDepth(TreeNode* root) {if (root == NULL) return 0;return 1 + max(maxDepth(root->left), maxDepth(root->right));}
};

迭代法:

class Solution {
public:int maxDepth(TreeNode* root) {if (root == NULL) return 0;queue<TreeNode*> que;que.push(root);int depth = 0;while (!que.empty()) {int size = que.size();depth++;while (size--) {TreeNode* node = que.front();que.pop();if (node->left) que.push(node->left);if (node->right) que.push(node->right);}}return depth;}
};

3 翻转二叉树

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;swap(root->left, root->right);if (root->left) invertTree(root->left);if (root->right) invertTree(root->right);return root;}
};

4 对称二叉树

class Solution {
public:bool compare(TreeNode* left, TreeNode* right) {if (left != NULL && right == NULL) return false;else if (left == NULL && right != NULL) return false;else if (left == NULL && right == NULL) return true;else if (left->val != right->val) return false;bool outside = compare(left->left, right->right);bool inside = compare(left->right, right->left);return outside && inside;}bool isSymmetric(TreeNode* root) {if (root == NULL) return true;return compare(root->left, root->right);}
};

5 二叉树的直径

class Solution {
public:int ans;int depth(TreeNode* node) {if (node == NULL) return 0;int left = depth(node->left);int right = depth(node->right);ans = max(ans, left + right + 1);return max(left, right) + 1;}int diameterOfBinaryTree(TreeNode* root) {ans = 1;depth(root);return ans - 1;}
};

6 二叉树的层序遍历

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;if (root == NULL) return result;queue<TreeNode*> que;que.push(root);while (!que.empty()) {int size = que.size();vector<int> vec;while (size--) {TreeNode* node = que.front();que.pop();vec.push_back(node->val);if (node->left) que.push(node->left);if (node->right) que.push(node->right);}result.push_back(vec);}return result;}
};

Day1做了13道题,暂且打住,明天再干👊

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

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

相关文章

品优购首页制作

一&#xff0c;常用模块类名命名 二&#xff0c;快捷导航shortcut制作 三&#xff0c;header制作 3.1LOGO SEO优化 3.2 搜索模块定位 四&#xff0c; nav导航制作 五&#xff0c;footer底部制作 六&#xff0c;main主体模块制作 以前书写是模块化中的公共部分 main主体模块是…

MyBatis介绍

MyBatis是一个优秀的持久层框架&#xff08;就是将某些数据持久化到硬盘或其他存储器中的框架&#xff09;&#xff0c;它把jdbc对数据库的操作进行了封装&#xff0c;使用户只需关注sql本身&#xff0c;不需要去执行jdbc的那一套复杂的操作。 MyBatis通过配置xml文件或注解的方…

Linux安全加固功能

提示:工具下载链接在文章最后 目录 一.加固功能介绍二.配置加固功能1.配置安全加固功能1.1 开放目前设备监听的所有端口1.2 只开放80、443、20、21、22端口1.3 防火墙配置工具1.3.1 开放允许访问的端口1.3.2 删除允许访问的端口1.3.3 添加IP地址允许访问规则1.3.4 添加IP地址禁…

漫画手绘视频教程分享

下载地址&#xff1a; 漫画手绘教程: https://url83.ctfile.com/d/45573183-60305653-039aed?p7526 (访问密码: 7526)

JavaScript基础3之面向对象关于面向过程、函数式编程、对比、构造函数、原型

JavaScript基础 面向对象面向过程函数式编程命令式编程函数式编程特性副作用透明引用不可变变量函数是一等公民 常见的函数式编程模型 面向对象为什么要使用面向对象封装继承多态 对比面向过程函数式编程面向对象 构造函数原型constructor使用场景 对象原型 面向对象 面向过程…

chrome自动更新后,手动恢复书签和历史记录

本文是针对google没有登录账号信息&#xff0c;浏览器更新后&#xff0c;如何恢复本地书签可历史记录。 为了解决“已被CORS策略阻止&#xff1a;请求的资源上没有’Access-Control-Allow-Origin’标头&#xff08;跨域请求失败”这个问题&#xff0c;修改了Google属性&#x…

android开发教程视频,android组件化和插件化

第一阶段&#xff1a;Android 基础知识回顾&#xff1a; 回顾Android 开发编程&#xff0c;深入理解Android系统原理和层次结构&#xff0c;深入分析Handler源码和原理&#xff1b;回顾Java&#xff0c;C/C&#xff0c;Kotlin、dart 在Android开发中必用的语言&#xff0c;熟悉…

算法学习03:前缀和与差分(互逆)

算法学习03&#xff1a;前缀和与差分&#xff08;互逆&#xff09; 文章目录 算法学习03&#xff1a;前缀和与差分&#xff08;互逆&#xff09;前言一、前缀和1.一维2.二维 二、差分1.一维在这里插入图片描述2.二维在这里插入图片描述 ![在这里插入图片描述](https://img-blog…

LeetCode 2368.受限条件下可到达节点的数目:搜索 + 哈希表

【LetMeFly】2368.受限条件下可到达节点的数目&#xff1a;搜索 哈希表 力扣题目链接&#xff1a;https://leetcode.cn/problems/reachable-nodes-with-restrictions/ 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给…

H3C接入交换机收到大量上行口(连接汇聚交换机)TC报文该怎么处理?(排查思路及解决办法)

一、问题描述 H3C接入交换机收到大量上行口的TC报文。 二、告警信息 三、TC报文排查思路 1、检查物理链路是否有问题。 2、检查是否有可能存在环路。 3、终端接入的端口开启STP边缘端口。 4、根桥的下联端口开启STP根保护。 5、如果对端设备不是管辖的范围且无法管理到,可考虑…

如何管理系统中的敏感数据?

如何管理系统中的敏感数据&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 如何在系统中管理敏感数据&#xff1f;下图列出了一系列指导原则。 什么是敏感数据&#xff1f; 个人身份信息 (PII)、健康信息、知识产权、财务…

STM32标准库——(17)硬件SPI读写W25Q64

1.SPI外设简介 时钟频率就是sck波形的频率&#xff0c;一个sck时钟交换一个bit&#xff0c;所以时钟频率一般体现的是传输速度&#xff0c;单位是Hz或者bit/s&#xff0c;那这里的时钟频率是fPCLK除以一个分频系数&#xff0c;分频系数可以配置为2或4或8、16、32、64、128、256…

输出X^N对233333取模的结果。

对任意正整数N&#xff0c;求XN%233333的值。 要求运算的时间复杂度为O(logN)。 例如X30 X15*X15X15X7*X7*XX7X3*X3*XX3X*X*X共7次乘法运算完毕。输入输出格式 输入描述: 输入两个整数X和N&#xff0c;用空格隔开&#xff0c;其中X,N<10^9。 输出描述: 输出X^N对233333取模…

STL容器之map和set的补充AVL树

一、AVL树 ​ 不同搜索的对比&#xff1a;1.暴力搜索时间复杂度是O(N)&#xff1b;2.二分查找的时间复杂度是O(lgN)&#xff0c;但是伴随着有序&#xff0c;插入删除挪动数据的成本极高&#xff1b;3.二叉搜索的时间复杂度是高度次数&#xff0c;极端场景会退化为类似链表时间…

【送书活动1】基于React低代码平台开发:构建高效、灵活的应用新范式

【送书活动1】基于React低代码平台开发&#xff1a;构建高效、灵活的应用新范式 写在最前面一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望《低代码平台开发实践&#xff1a;基于React》编辑推荐内容简介作者…

基于springboot实现的学生评奖评优管理系统的设计与实现(源码|论文)

系统概述 springboot实现的学生评奖评优管理系统的设计与实现&#xff0c;系统分Web端和后台管理端&#xff0c;后端采用的是springbootmybatis&#xff0c;前端采用vuehtml&#xff0c;代码简洁易懂&#xff0c;有配套论文初稿&#xff0c;适合新手小白学变编程... 一、系统架…

RocketMQ—RocketMQ集成SpringBoot

RocketMQ—RocketMQ集成SpringBoot 新建生产者的boot项目和消费者的boot项目&#xff0c;pom文件重点如下&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</arti…

Docker中使用nginx-rtmp推拉网络摄像头视频流

前言&#xff1a; 该部分比较麻烦&#xff0c;闹腾了好久&#xff08;ffmpeg推拉流没学过&#xff0c;事实证明依葫芦画瓢是不行滴&#xff0c;后面有时间再学吧&#xff09;&#xff0c;后来借助chatGPT勉强解决&#xff0c;但不是很懂。因个人能力有限&#xff0c;只复述操作…

Starknet(strk) 跨链桥教程:手把手教你用bitget钱包跨链

摘要&#xff1a;通过Rhino.fi &#xff0c;将资产无缝桥接至Starknet&#xff08;web3.bitget.com/zh/assets/starknet-wallet&#xff09;变得高效且具有成本效益&#xff0c;Rhino.fi 是一个以其快速处理时间和低交易费用而闻名的平台。它专为与 MetaMask 等流行的 Web 3 钱…

长整数拼接后求余数

原题&#xff1a;2024牛客寒假算法基础集训营3 M题 方法一&#xff1a; 用递归进行长整数除法&#xff0c;暴力寻找&#xff0c;但是会超时 #include <bits/stdc.h> using namespace std; bool f(string &s, int ans,int count) {if (count > s.size()) {if (a…