leetcode 2.27

leetcode hot 100

  • 哈希
    • 1.字母异位词分组
    • 2.最长连续序列
  • 双指针
    • 1.盛最多水的容器
    • 2.和为 K 的子数组
  • 数组
    • 1.除自身以外数组的乘积

哈希

1.字母异位词分组

49. 字母异位词分组

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

unordered_map<string, vector<string>>

主要是理解,key是排序后的字母序列,value是vector,存放了多个string

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {int n = strs.size();unordered_map<string, vector<string>> map;for (auto s : strs) {string tmp = s;sort(tmp.begin(), tmp.end());map[tmp].emplace_back(s);}vector<vector<string>> ans;for (unordered_map<string, vector<string>>::iterator it = map.begin(); it != map.end(); it++) {ans.emplace_back(it->second);}return ans;}
};

2.最长连续序列

128. 最长连续序列
重要的是思路,
1.用set去除重复数
2.找到一个序列起点最小的数num,开始在容器里while找num++是否存在,如果存在那么len++
3.怎么找到最小数,也不能说是最小数,是一个连续数种的最小数,num - 1如果存在那么他就不是连续的最小数
在这里插入图片描述

unordered_set<int> mp;
...
for (auto num: mp) {if (mp.count(num -1)) continue;int curnum = num;int len = 1;while (mp.count(curnum + 1)) {curnum += 1;len += 1;}longestlen = max(len, longestlen);
}
class Solution {
public:int longestConsecutive(vector<int>& nums) {int res = 0;    // 记录最长连续序列的长度unordered_set<int> num_set(nums.begin(), nums.end());   // 记录nums中的所有数值int seqLen;for(int num: num_set){// 如果当前的数是一个连续序列的起点,统计这个连续序列的长度if(!num_set.count(num - 1)){seqLen = 1;     // 连续序列的长度,初始为1while(num_set.count(++num))seqLen++;    // 不断查找连续序列,直到num的下一个数不存在于数组中res = max(res, seqLen);     // 更新最长连续序列长度}}return res;}
};

双指针

1.盛最多水的容器

11. 盛最多水的容器
两个for循环找最大值会超时,那么就有小心机,如果当前高度不比之前高,那么答案一定小于之前的值,就不必再循环了

class Solution {
public:int maxArea(vector<int>& height) {int left = 0, ans = 0, high = 0;for (; left < height.size() - 1; left++) {if (height[left] > high) high = height[left];if (height[left] < high) continue;for (int right = left + 1; right < height.size(); right++) {int tmp = (right - left) * min(height[left], height[right]);ans = max(ans, tmp); }}return ans;}
};

正经的比较快的算法是,两端向中间移动,每次移动较小的边,计算最大值

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

2.和为 K 的子数组

560. 和为 K 的子数组
题目需要注意的是和为K的子数组,那么:
1.用pre[i]表示num[0]到num[i]的和
2.num[i + 1]到num[j]的和为 pre[j] - pre[i]
3.其和为k, 那么,nums[j]位置需要找到和为pre[j] - k的前缀和

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> mp;mp[0] = 1;int pre = 0, ans = 0;for (auto &c : nums) {pre += c;if (mp.count(pre - k)) {ans += mp[pre - k];}mp[pre]++;}return ans;}
};

数组

1.除自身以外数组的乘积

238. 除自身以外数组的乘积
还是想用前缀和做,计算num[i]的乘积,就是计算pre[i -1] * 后缀和
但是超时了

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {vector<int> ans;int pre = 0;for (int i = 0; i < nums.size(); i++) {if (i == 0) pre = 1;else pre *= nums[i - 1];int tmp = pre;for (int j = i + 1; j < nums.size(); j++) {tmp *= nums[j];}ans.emplace_back(tmp);}return ans;}
};

前缀和 + 后缀和
前缀和
1.i从0开始向后
2.ans[i] = pre;
3.pre *= nums[i];
先把pre[i -1]放到ans[i],再乘

后缀和
1.i从size()-1开始向前
2.ans[i] *= sum2;
3.sum2 *= nums[i];
前缀乘以back[i+1]到back.end() - 1

https://blog.csdn.net/qq_43553082/article/details/118620364
vector在还没有分配任何空间时还不能像数组一样用下标形式去访问vector的(v[0]也不行)!!!否则编译通过但报运行错误runtime error!
如vector创建的时候是使用:vector<int> v;
或者vector还是[]的时候(考虑官方测试数据的输入可能为[]的情况,使用[ ]前需要判断一下是否为空)会报错!
如:v[0]=1、if(v[0])、v[0]等情况都会报错
这种情况需要先push_back()或v={1,2}等形式给其分配了空间后,才能用【】形式访问!
本题中:
vector<int> ans(nums.size());

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {vector<int> ans(nums.size());int sum = 1;for (int i = 0; i < nums.size(); i++) {ans[i] = sum;sum *= nums[i];}int sum2 = 1;for (int i = nums.size() - 1; i >= 0; i--) {ans[i] *= sum2;sum2 *= nums[i];}return ans;}
};

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

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

相关文章

【医学影像】LIDC-IDRI数据集的无痛制作

LIDC-IDRI数据集制作 0.下载0.0 链接汇总0.1 步骤 1.合成CT图reference 0.下载 0.0 链接汇总 LIDC-IDRI官方网址&#xff1a;https://www.cancerimagingarchive.net/nbia-search/?CollectionCriteriaLIDC-IDRINBIA Data Retriever 下载链接&#xff1a;https://wiki.canceri…

VUE3搭载到服务器

1.搭建服务器 使用 Windows 自带的 IIS 作为服务器。 步骤如下&#xff1a;https://blog.csdn.net/qq_62464995/article/details/130140673 同时&#xff0c;上面的步骤中&#xff0c;还使用了 cpolar 将 IIS 本地网址映射到公共网址。 注&#xff1a; cpolar客户端&#xf…

在TMP中计算书名号《》高度的问题

1&#xff09;在TMP中计算书名号《》高度的问题 2&#xff09;FMOD设置中关于Virtual Channel Count&Real Channel Count的参数疑问 3&#xff09;Unity 2021.3.18f1 ParticleSystemTrailGeometryJob粒子拖尾系统崩溃 4&#xff09;XLua打包Lua文件粒度问题 这是第375篇UWA…

python 基础绘图函数 实例

简介 在 Python 中&#xff0c;有许多用于绘图的库。以下是一些常用的 Python 绘图库及其基本绘图函数的简要介绍&#xff1a; Matplotlib: matplotlib.pyplot.plot(x, y): 绘制线图。matplotlib.pyplot.scatter(x, y): 绘制散点图。matplotlib.pyplot.bar(x, height): 绘制条…

4核8g服务器能支持多少人访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

ESP32语音转文字齐护百度在线语音识别

一、导入(10分钟&#xff09; 学习目的 二、新授(70分钟) 1.预展示结果(5分钟) 2.本节课所用的软硬件(5分钟) 4.图形化块介绍(10分钟) 5.单个模块的简单使用(10分钟) 6.在线语音转换工具逻辑分析(10分钟) 7.在线语音转换工具分步实现(30分钟) 三、巩固练习(5分钟) 四、课堂小结…

Unity的相机跟随和第三人称视角

Unity相机跟随和第三人称视角 介绍镜头视角跟随人物方向进行旋转的镜头视角固定球和人的镜头视角 思路跟随人物方向进行旋转的镜头视角固定球和人的镜头视角 镜头旋转代码人物移动的参考代码注意 介绍 最近足球项目的镜头在做改动&#xff0c;观察了一下实况足球的视角&#x…

书生·浦语大模型全链路开源体系介绍

背景介绍 随着人工智能技术的迅猛发展&#xff0c;大模型技术已成为当今人工智能领域的热门话题。2022 年 11 月 30 日&#xff0c;美国 OpenAI 公司发布了 ChatGPT 通用型对话系统 并引发了全球 的极大关注&#xff0c;上线仅 60 天月活用户数便超过 1 亿&#xff0c;成为历史…

10.selenium的基本使用

selenium是一个关于爬虫功能python的库&#xff0c;它的整体逻辑与之前的请求爬虫思路不同。selenium是模拟出一个浏览器&#xff0c;你通过代码操作这个浏览器从而获取一些信息&#xff0c;比如执行click()就相当于点击了浏览器中的某个元素&#xff0c;相当于是针对浏览器的鼠…

统计分析笔记3

文章目录 统计检验选择正确的统计检验统计检验是做什么的&#xff1f;何时进行统计检验选择参数化测试&#xff1a;回归、比较或相关性选择非参数检验 假设检验的假设条件skewness什么是零偏度right skewleft skew计算skewnesswhat to do if your data is skewed kurtosis怎么计…

【文献管理】Zotero使用指南:软件安装 | 插件安装 | 同步 | 文献导入及引用

文章目录 1 下载2 安装3 插件安装浏览器插件&#xff1a;Zotero Connector翻译插件&#xff1a;zotero-pdf-translate笔记插件&#xff1a;zotero better notes为下载的学位论文添加目录中文文献识别&#xff1a;jasminumzotero-gptZoteroIF[Zotero DOI Manager](https://githu…

UI自动化测试:playwright工具(一):python环境下安装、UI录制使用(需要些代码能力)

一、python环境下安装playwright工具 1. 安装playwright库 pip install playwright -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com#至于镜像源,可以选,也可不选:#阿里云 http://mirrors.aliyun.com/pypi/simple/ #中国科技大学 https://py…