腾讯百度阿里华为常见算法面试题TOP100(4):双指针、哈希、滑动窗口

之前总结过字节跳动TOP50算法面试题:

字节跳动常见算法面试题top50整理_沉迷单车的追风少年-CSDN博客_字节算法面试题

目录

双指针

42.接雨水 

283.移动零 

11.盛最多水的容器

15.三数之和 

哈希

1. 两数之和

49.字母异位词分组

128.最长连续序列 

滑动窗口

3.无重复字符的最长子串

 438.找到字符串中所有字母异位词


双指针

42.接雨水 

用单调栈再做一遍吧……

class Solution {
public:int trap(vector<int>& height) {//当前柱子如果小于等于栈顶元素,说明形不成凹槽,则将当前柱子入栈;//反之若当前柱子大于栈顶元素,说明形成了凹槽,于是将栈中小于当前柱子的元素pop出来,将凹槽的大小累加到结果中。int ans = 0;stack<int> sta;for (int i = 0; i < height.size(); i++) {while (!sta.empty() && height[i] > height[sta.top()]) {int top = sta.top();sta.pop();if (sta.empty()) {break;}int left = sta.top();int w = i - left - 1;int h = min(height[i], height[left]) - height[top];ans += w * h;}sta.push(i);}return ans;}
};

283.移动零 

class Solution {
public:void moveZeroes(vector<int>& nums) {// 双指针// 左指针指向当前已经处理好的序列的尾部// 右指针指向待处理序列的头部// 每次交换都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变int left = 0;int right = 0;while (right < nums.size()) {if (nums[right] != 0) {swap(nums[left], nums[right]);left ++;}right ++;}return;}
};

11.盛最多水的容器

class Solution {
public:int maxArea(vector<int>& height) {int left = 0;int right = height.size() - 1;int ans = 0;while (left < right) {int minheight = min(height[left], height[right]); //盛水取决于最短的线ans = max(ans, (minheight * (right - left)));if (height[left] < height[right]) { // 移动短的线left ++;} else {right --;}}return ans;}
};

15.三数之和 

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {// 排序后用双指针查找vector<vector<int> > ans;sort(nums.begin(), nums.end());int left, right;for (int i = 0; i < nums.size() - 1; i++) {if (nums[i] > 0) {continue;}left = i + 1;right = nums.size() - 1;while (left < right) {if ((nums[i] + nums[left] + nums[right]) == 0) {ans.push_back({nums[i], nums[left], nums[right]});// 去除重复元素while (left < right && nums[left] == nums[left + 1]) {left ++;}while (left < right && nums[right] == nums[right - 1]) {right --;}// 移动指针left ++;right --;} else if ((nums[i] + nums[left] + nums[right]) > 0) {right --;} else {left ++;}}// i 下标也需要去重while (i + 1 < nums.size() && nums[i] == nums[i + 1])i++;}        return ans;}
};

哈希

1. 两数之和

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> ans;unordered_map<int, int> m;for (int i = 0; i < nums.size(); i++) {if (m.find(nums[i]) != m.end()) {return {m[nums[i]], i};}m[target - nums[i]] = i;}return ans;}
};

49.字母异位词分组

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>> ans;// 哈希表存储unordered_map<string, vector<string> > m; for (auto s : strs) {string key = s;// 排序后所有异位词存在唯一keysort(key.begin(), key.end());m[key].push_back(s);}for (auto it = m.begin(); it != m.end(); it++) {ans.push_back(it->second);}return ans;}
};

128.最长连续序列 

class Solution {
public:int longestConsecutive(vector<int>& nums) {// 用哈希表存储是否出现过的数字unordered_set<int> hash;int ans = 0;for (auto num : nums) {hash.insert(num);}for (auto x : hash) {// 如果当前数字前面没有出现过数字,则从当前位置开始查// 因为如果前一个数字出现过, 那么他已经被查找过了if (!hash.count(x - 1)) {int y = x;// 一直往后查找连续的序列while (hash.count(y + 1)) {y++;}// 维护最大的ansans = max(ans, y - x + 1);}}return ans;}
};

滑动窗口

3.无重复字符的最长子串

class Solution {
public:int lengthOfLongestSubstring(string s) {// 滑动窗口int left = 0;int right = 0;int ans = 0;// 记录窗口unordered_map<char, int> windows;while (right < s.size()) {char c = s[right];right ++;windows[c] ++;// 收缩窗口while (windows[c] > 1) {char d = s[left];left ++;windows[d] --;}// 维护最大ansans = max(right - left, ans);}return ans;}
};

 438.找到字符串中所有字母异位词

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ans;// 滑动窗口int left = 0;int right = 0;int count = 0;// 当前窗口中的字符和需要凑齐的字符unordered_map<char, int> windows, need;// 需要凑齐的字符for (auto c : p) {need[c] ++;}while (right < s.size()) {// 向右滑动char c = s[right];right ++;// 进行窗口内数据更新if (need.count(c)) {windows[c] ++;if (windows[c] == need[c]) {count ++;}}// 左侧收缩窗口while (right - left >= p.size()) {if (count == need.size()) {ans.push_back(left);}char d = s[left];left ++;// 窗口内数据更新if (need.count(d)) {if (windows[d] == need[d]) {count --;}windows[d] --;}}}return ans;}
};

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

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

相关文章

网络协议全景:Linux环境下的TCP/IP、UDP

目录 1.UDP协议解析1.1.定义1.2.UDP报头1.3.特点1.4.缓冲区 2.TCP协议解析2.1.定义2.2.报头解析2.2.1.首部长度&#xff08;4位&#xff09;2.2.2.窗口大小2.2.3.确认应答机制2.2.4.6个标志位 2.3.超时重传机制2.4.三次握手四次挥手2.4.1.全/半连接队列2.4.2.listen2.4.3.TIME_…

SQL进阶的技巧:如何实现某列的累计乘积?

目录 0 场景描述 1 数据准备 2 问题分析 3 完全情况查询 4 小结 0 场景描述 在做数据处理的时候,尤其是复利累积的时候,有时候会有这样一场景,通过某种条件找到一列数据[X1,X2,X3...Xn],然后想要求y=X1X2X3...Xn。下面给出一个具体案例来详细解释这一问题,如下图所示…

学成在线练习(HTML+CSS)

准备工作 项目目录 内部包含当前网站的所有素材&#xff0c;包含 HTML、CSS、图片、JavaScript等等 1.由于元素具有一些默认样式&#xff0c;可能是我们写网页过程中根本不需要的&#xff0c;所有我们可以在写代码之前就将其清除 base.css /* 基础公共样式&#xff1a;清除…

大模型入门3:理解LLAMA

LLama在transformers库中的代码&#xff0c;以及各部分原理Llama3.1技术报告LLama 33b 微调尝试 Model a stack of DecoderBlocks(SelfAttention, FeedForward, and RMSNorm) decoder block 整体结构&#xff1a;最大的区别在pre-norm x -> norm(x) -> attention() -…

什么是上拉,下拉?

上拉就是将引脚通过一个电阻连接到电源&#xff0c;作用&#xff1a;1.使IO口的不确定电平稳定在高点平&#xff0c;2、为了增加IO口拉电流的能力。 下拉就是将引脚通过一个电阻与GND相连&#xff0c;作用&#xff1a;1.从器件输出电流 2.当IO口为输入状态时&#xff0c;引脚的…

【爱给网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

Flet全平台开发:软件开发界勇士为Python语言补短板的一次极具挑战性的尝试、冲刺和华丽亮相

一、Flet创始人和开发者介绍、开发Flet的背景介绍 Flet 的创始人和开发者 Feodor Fitsner 是俄罗斯人&#xff0c;就职于微软。 Flet 的第一个版本于 2022 年 6 月发布。这是一个相对较新的库&#xff0c;它基于 Flutter 框架&#xff0c;首先支持的是用 Python 语言开发软件…

速通汇编(五)认识段地址与偏移地址,CS、IP寄存器和jmp指令,DS寄存器

一&#xff0c;地址的概念 通常所说的地址指的是某内存单元在整个机器内存中的物理地址&#xff0c;把整个机器内存比作一个酒店&#xff0c;内存单元就是这个酒店的各个房间&#xff0c;给这些房间编的门牌号&#xff0c;类比回来就是内存单元的物理地址 在第一篇介绍debug的…

文心智能体应用:美国旅游助手的诞生

创造灵感 在如今的数字化时代&#xff0c;旅行体验越来越依赖于智能技术的辅助。从机票预订到行程安排&#xff0c;再到当地美食推荐&#xff0c;智能助手在旅行中的作用愈发重要。尤其在美国这样一个广袤且多样化的国家&#xff0c;拥有一个智能旅行助手能够极大地提升游客的…

C++3D迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> using namespace std; void printmaze(char strmaze[5][5][5]) {cout << "-----" << endl;int i 0;int ia 0…

react18基础教程系列--安装环境及packagejson文件分析

一个React项目中&#xff0c;默认会安装: react:React框架的核心react-dom:React 视图渲染的核心「基于React构建WebApp(HTML页面)J—>react-native:构建和渲染App的react-scripts: 脚手架为了让项目目录看起来干净一些&#xff0c;把webpack打包的规则及相关的插件/LOADER…

《OpenCV计算机视觉》—— 图像金字塔

文章目录 什么是图像金字塔&#xff1f;一、定义与基本原理二、主要类型三、构建过程四、应用领域 图像金字塔中的下采样和上采样一、下采样&#xff08;Downsampling&#xff09;二、上采样&#xff08;Upsampling&#xff09;三、总结 代码实现 什么是图像金字塔&#xff1f;…

YOLOv8目标检测模型——遥感小目标检测经验分享

小目标检测——YOLOV8 一、引言 背景介绍 &#xff08;1&#xff09;目标检测的重要性 目标检测在许多领域都具有极其重要的作用。在自动驾驶中&#xff0c;目标检测能够识别道路上的障碍物和行人&#xff0c;确保行车安全。在视频监控中&#xff0c;目标检测能够实时发现异…

从登录到免登录:JSP与Servlet结合Cookie的基本实现

前言 JSP中应用Cookie解析&#xff1a; 用户登录成功后&#xff0c;将用户信息保存到Cookie中&#xff0c;在页面读取Cookie并显示&#xff0c;不需要再次登录可以直接进入页面 第一步&#xff1a;创建JavaWeb项目&#xff0c;配置pom.xml文件 创建maven项目&#xff0c;项目名…

DB-GPT部署和试用

前言 DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。 目的是构建大模型领域的基础设施&#xff0c;通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Mu…

Element UI入门笔记(个人向)

Element UI入门笔记 将页面分割为一级菜单、二级菜单、导航栏三个部分&#xff1b;使用npm下载安装&#xff0c;使用语句npm i element-ui -s; 布局组件 el-form 用于创建和管理表单&#xff1b;从属性上看&#xff1a; :model&#xff1a;用于双向数据绑定&#xff0c;将表单…

打造古风炫酷个人网页:用HTML和CSS3传递笔墨韵味

需要用到的背景大家可以自己找喜欢的风格!!! 当然俺把俺用的背景放到文章最后了哦&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 感谢关注和支持 长期更新哦~~~ 1. 简洁的页面布局&#xff1a;保持优雅和对称 在古风设计中&#xff0c;布局的对称性非常重要…

Linux - 探秘/proc/sys/net/ipv4/ip_local_port_range

文章目录 Pre概述默认值及其意义评估需求如何调整临时修改永久修改测试和验证 修改的潜在影响 Pre Linux - 探秘 Linux 的 /proc/sys/vm 常见核心配置 计划&#xff1a; 简要解释 /proc/sys/net/ipv4/ip_local_port_range 文件的功能和作用。介绍该文件的默认值及其影响。说明…

螺丝、螺母、垫片等紧固件常用类型详细介绍

螺钉、螺母、垫片等紧固件介绍 螺钉 杯头内六角 首先介绍一下杯头内六角&#xff0c;杯头内六角是我们用的最常见的一种螺钉&#xff0c;如果你对选择螺钉没有什么想法&#xff0c;可以直接无脑选杯头内六角去使用。 比如说我们有一个零件加工了通孔&#xff0c;另一个零件加…

Vue3.0组合式API:setup()函数

1、什么是组合式API Vue 3.0 中新增了组合式 API 的功能&#xff0c;它是一组附加的、基于函数的 API&#xff0c;可以更加灵活地组织组件代码。通过组合式 API 可以使用函数而不是声明选项的方式来编写 Vue 组件。因此&#xff0c;使用组合式 API 可以将组件代码编写为多个函…