腾讯百度阿里华为常见算法面试题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.rhkb.cn/news/425931.html

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

相关文章

GUI编程13:JDialog弹窗

视频链接&#xff1a;15、JDialog弹窗_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p15&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 package com.yundait.lesson04;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; im…

计算机网络27、28——Linux命令1、2

1、虚拟机网络前方路径内容 用户名机器名&#xff1a;/$ $表示普通用户&#xff0c;#表示root用户 2、Linux不分盘&#xff0c;都是绝对路径 /表示根目录&#xff0c;表示计算机文件夹下 ~是当前用户的家&#xff0c;表示home文件夹下自己的文件夹 3、bin文件夹下的是可执…

书生大模型全链路开源体系,学习

优点 书生浦语开源大模型&#xff0c;是一个开源的大模型&#xff0c;大家可以一起学习 还有配套的教学视频&#xff0c;很快就能上手&#xff0c;而且还奖励算力&#xff0c;可以直接训练&#xff0c;讨论学习&#xff0c;非常nice。 教学视频 书生浦语大模型全链路开源开…

Qt实现登录界面

本文基于Qt实现一个简单的登录界面&#xff0c;主要使用到Widget、button、edit等控件&#xff0c;基于自定义的信号槽实现界面的跳转&#xff0c;使用绘图设备添加背景图等。 1. 创建主界面 设计主界面的样式&#xff0c;并添加相关的控件。如下显示&#xff1a; 代码如下&…

Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化

Android Tools | 如何使用Draw.io助力Android开发&#xff1a;从UI设计到流程优化 1. 引言 在Android开发中&#xff0c;视觉化设计与流程管理至关重要。虽然开发工具如Android Studio强大&#xff0c;但它并不适用于所有设计场景。Draw.io是一款免费的在线绘图工具&#xff…

【C++笔记】类和对象的深入理解(三)

【C笔记】类和对象的深入理解(三) &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】类和对象的深入理解(三)前言一.日期类的实现1.1声明和定义分离1.2日期类整数1.3日期类整数1.4日期类-整数1.5日期类-日期1.6复用对…

5. Python之数据类型

Python数据类型有数值型&#xff0c;字符串型&#xff0c;布尔型等等 内置函数type()&#xff0c;可以查看变量的数据类型 。 一、数值类型 整数&#xff08;没有小数部分&#xff0c;包含正整数&#xff0c;负整数&#xff0c;0&#xff0c;默认为十进制数&#xff09;&…

RuoYi-Vue3使用minio图片预览不了的问题

参照官网配置好之后&#xff0c;图片预览不了 1、参照官网修改前端src\components\ImageUpload\index.vue 2、如果图片预览不了&#xff0c;发现是Minio后台返回的url地址内部包括逗号 与代码里split(",")冲突了&#xff0c; 解决方法是改成分号 多个图片可以预览了…

Pikachu靶场之csrf

CSRF 跨站请求伪造 CSRF入门及靶场实战 - FreeBuf网络安全行业门户 攻击者伪造恶意链接&#xff0c;诱使用户点击&#xff0c;这个链接附带了用户的认证凭据Cookie、Session等&#xff0c;执行操作如转账。 因为带了cookie、session&#xff0c;服务器认为是用户的行为。借用…

mysql-搭建主从复制

文章目录 1、准备主服务器2、准备从服务器3、主库配置3.1、创建MySQL主服务器配置文件&#xff1a; 4、从库配置5、搭建主从&测试5.1、使用命令行登录MySQL主服务器5.2、主机中查询master状态&#xff1a;5.3、从机中查询slave状态&#xff1a;5.4、主机中创建slave用户&am…

go-map系统学习

map底层结构 Goland的map的底层结构使用hash实现&#xff0c;一个hash表里有多个hash表节点&#xff0c;即bucket&#xff0c;每个bucket保存了map中的一个或者一组键值对。 map结构定义&#xff1a; runtime/map.go:hmap type hmap struct {// Note: the format of the hma…

从零开学C++:多态

引言&#xff1a;在我们去购买汽车票的时候&#xff0c;我们总会遇到成人全价&#xff0c;学生打折的情况。不同的对象&#xff08;成人、学生&#xff09;进行同一操作&#xff08;购买车票&#xff09;&#xff0c;得到不同的结果&#xff08;全价、打折&#xff09;&#xf…

Redis实现发布/订阅功能(实战篇)

前言 博主在学习 Redis 实现发布订阅功能的时候&#xff0c;踩了太多的坑。 不是讲解不详细&#xff0c;看的一知半解&#xff1b;就是代码有问题&#xff0c;实际压根跑不起来&#xff01; 于是博主萌生了自己写一个最新版且全程无错的博客供各位参考。希望各位不要把我才过…

深入理解IP地址分类及子网划分详解

在互联网时代&#xff0c;IP地址是网络通信的基础。无论是访问网站、发送电子邮件&#xff0c;还是进行数据传输&#xff0c;IP地址都扮演着至关重要的角色。本文将详细解析IP地址的分类及子网划分的原理&#xff0c;帮助你更好地理解网络架构及其应用。 一、什么是IP地址 IP…

教师薪酬管理系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;老师信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

Android MediaPlayer + GLSurfaceView 播放视频

Android使用OpenGL 播放视频 概述TextureView的优缺点OpenGL的优缺点 实现复杂图形效果的场景参考 概述 在Android开发中&#xff0c;使用OpenGL ES来渲染视频是一种常见的需求&#xff0c;尤其是在需要实现自定义的视频播放界面或者视频特效时。结合MediaPlayer&#xff0c;我…

吸浮毛宠物空气净化器推荐,希喂、小米、有哈宠物空气净化器测评

养猫需谨慎&#xff0c;不然就要做猫奴一辈子啦&#xff01;上次堂妹来我家住几天&#xff0c;刚开始还担心和猫处不来&#xff0c;不敢去摸它&#xff0c;走的时候已经约好下次来看它的时间&#xff0c;笑死我了。毕竟猫咪这么可爱&#xff0c;很少有人可以抵抗它的魅力。 这不…

什么是科技与艺术相结合的异形创意圆形(饼/盘)LED显示屏

在当今数字化与创意并重的时代&#xff0c;科技与艺术的融合已成为推动社会进步与文化创新的重要力量。其中&#xff0c;晶锐创显异形创意圆形LED显示屏作为这一趋势下的杰出代表&#xff0c;不仅打破了传统显示设备的形态束缚&#xff0c;更以其独特的造型、卓越的显示效果和广…

3谐振功率放大器的实际电路设计

1原理电路 下图是谐振功率放大器的原理电路&#xff0c;如果我们照着下图搭一个电路&#xff0c;会发现它可能实现不了功率放大?这是为什么&#xff1f; 2实际电路设计 2.1要注意直流馈电线路 馈电原则(馈电供电)&#xff1a; 1&#xff09;保证直流电流分量流过直流电源&…

基于SpringBoot+Vue的校园礼服装租赁系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…