刷题日记:面试经典 150 题 DAY6

刷题日记:面试经典 150 题 DAY6

  • 392. 判断子序列
  • 167. 两数之和 II - 输入有序数组
  • 11. 盛最多水的容器
  • 15. 三数之和
  • 209. 长度最小的子数组

392. 判断子序列

原题链接 392. 判断子序列

双指针,i指向s,j指向t

  • 如果s[i]==t[j],则匹配到一个字母,两个指针都后移
  • 如果s[i]!=t[j],则指针j后移继续寻找
class Solution {
public:bool isSubsequence(string s, string t) {int i = 0, j = 0;if(s.size() == 0) return true;while(i < s.size() && j < t.size()) {if(s[i] != t[j]) {j++;if(j >= t.size()) {return false;}} else {i++, j++;if(i >= s.size()) {return true;}}}return false;}
};

167. 两数之和 II - 输入有序数组

原题链接 167. 两数之和 II - 输入有序数组
双指针本质上是对搜索空间进行某种顺序的遍历,一般都会用得上某种单调性
对于题来说,搜索空间如下所示
在这里插入图片描述

  • 选择棕色作为起点,是因为从这里出发可以仅通过(向左,向右)两个动作到达任意一个状态,。这保证了不会有答案被漏,
  • 比起爆搜来说可以提升性能的原因在于,利用单调性进行搜索的剪枝。比如我们得知当前状态比目标状态大时,就可以确定一系列状态都不可能是目标状态了。在这里插入图片描述
    从实现上来说,就是一个指针位于数列头部,一个位于尾部,两个指针逐渐向中间靠拢
class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {for(int i = 0, j = numbers.size()-1;i < j;) {if(numbers[i]+numbers[j] == target) {return {i+1 , j+1};}if(numbers[i]+numbers[j] < target) {i++;}if(numbers[i]+numbers[j] > target) {j--;}}return {};}
};

11. 盛最多水的容器

原题链接 11. 盛最多水的容器

容积等于 两个板子相差的距离×较矮板子的的高。使用双指针,从最宽的底开始,接下里考虑移动哪个指针

  • 若移动指向较高板子的指针,则底一定变小,高也一定变小(因为高总是较低板子的高)
  • 所以只能移动指向较低板子的指针
class Solution {
public:int maxArea(vector<int>& height) {int result = 0;for(int i = 0, j = height.size()-1;i < j;) {result = max(result,(j-i)*min(height[i],height[j]));if(height[i] < height[j]) {i++;} else {j--;}}return result;}
};

15. 三数之和

爆搜 O ( N 3 ) O(N^3) O(N3),可以比较简单的想到先排序,再固定一个数就可以使用双指针了。
我一开始脑抽,想着固定中间大小的那个(老是想追求对称性导致的),直接处理重复情况处理闷了。
固定最小的数比较好做。把最小数固定其实就回到了167. 两数之和 II - 输入有序数组。注意两点

  • 最外层循环遍历到正数就可以立马停止
  • 每次移动指针时,都尽可能到达连续相同元素的尾部,防止重复的情况发生
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int len = nums.size();sort(nums.begin(), nums.end());vector<vector<int>> result;for(int i = 0;i < len-2;i++) {if(nums[i] > 0) break;if(i > 0 && nums[i-1] == nums[i]) continue;for(int j = i+1, k = len-1;j < k;) {int sum = nums[i]+nums[j]+nums[k];if(sum < 0) {for(j += 1;j<k && nums[j-1]==nums[j];j++);} else if(sum>0) {for(k -= 1;j<k && nums[k+1]==nums[k];k--);} else {result.push_back({nums[i],nums[j],nums[k]});for(j += 1;j<k && nums[j-1]==nums[j];j++);for(k -= 1;j<k && nums[k+1]==nums[k];k--);}}}return result;}
};

209. 长度最小的子数组

原题链接 209. 长度最小的子数组

想象数组是一组竖杆,杆与杆之间距离不一。有个皮筋,现在是松弛状态,想要找到能让它绷紧时跨越最少的竖杆。
先给皮筋套在最左边,然后抻右端,直到皮筋紧,然后一点点松左端,直到恰好送掉,然后在抻右端,重复这个步骤

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int len = nums.size();int ans = len+1;int left = 0, right = 0;int length = 0;int sum = 0;while(right < len) {sum += nums[right];length++;while(sum >= target) {ans = min(ans,length);sum -= nums[left];length--;left++;}right++;}if(ans > len) return 0;return ans;}
};

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

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

相关文章

实验11-1-9 藏尾诗(PTA)

题目&#xff1a; 本题要求编写一个解密藏尾诗的程序。 注&#xff1a;在 2023 年 1 月 17 日 15 点 14 分以后&#xff0c;该题数据修改为 UTF-8 编码。 输入格式&#xff1a; 输入为一首中文藏尾诗&#xff0c;一共四句。每句一行&#xff0c;但句子不一定是等长的&#…

JDK1.8超详细安装教程

1、下载jdk1.8 大家可以直接去百度云盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/187N6CU9Gu4bjtOz5_cjd-A?pwd3535 提取码&#xff1a;35352、开始安装 双击下载好的.exe文件&#xff0c;点击下一步 修改安装路径&#xff0c;点击下一步 会顺带安装jre…

Redux 的工作流程

Redux 是一个用于管理 JavaScript 应用程序状态的库。它的工作流程主要包括以下步骤&#xff1a; 1、Action 创建&#xff1a;当用户与应用程序交互时&#xff08;例如点击按钮&#xff09;&#xff0c;会触发一个 Action。Action 是一个描述了发生了什么的普通 JavaScript 对象…

107 在携带请求体的情况下, hutool 将 get 请求转换为了 post 请求

前言 本问题主要是来自于同事 情况大致如下, 同样的代码 一个是测试用例, 一个是生产环境的应用, 访问同一个第三方服务, 参数什么的完全一致 但是 出现的问题就是 测试用例能够拿到正确的对方的响应, 但是 生产环境的应用 却是拿到的对方的报错 然后 我开始以为是 是否…

前端面试题详解

前端面试 1.app如何实现登陆成功&#xff0c;卸载app重新安装再进入获取上一次已经登陆的信息&#xff1f; 要实现前端APP在登录成功后&#xff0c;即使卸载并重新安装也能获取上一次已经登录的信息&#xff0c;通常涉及以下几个关键步骤&#xff1a; 1. 使用持久化存储 在APP…

【CKA模拟题】学会JSONPath,精准定位Pod信息!

题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetesyou have a script named pod-filter.sh . Update this script to include a command that filters and displays the label with the…

安卓Android入门

安卓作为日常生活中不可缺少的移动操作系统&#xff0c;在5G的发展和应用过程中发挥着其重要的作用。 5G是第五代移动通信技术&#xff0c;拥有更快的速度、更高的带宽、更低的延迟和更大的连接密度。这一技术的快速发展为移动设备和应用提供了更多的可能性。 安卓和5G的关系…

哪些患者不适用于数字OT训练系统进行康复训练

数字OT&#xff08;Occupational Therapy&#xff0c;职业治疗&#xff09;训练系统是一种通过数字化技术辅助患者进行康复训练的方法。尽管数字OT训练系统可以帮助很多患者进行康复训练&#xff0c;但并非所有患者都适合使用该系统。以下是一些不适合使用数字OT训练系统进行康…

Qt 多元素控件

Qt开发 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别 以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件. QTableView 自身不持有数据. 使用QTableView 的 …

OSPF特殊区域(stub\nssa)

stub区域——只有1类、2类、3类&#xff1b;完全stub区域——只有1类、2类 NSSA区域&#xff1a;本区域将自己引入的外部路由发布给其他区域&#xff0c;但不需要接收其他区域的路由 在NSSA区域的路由器上&#xff0c;引入外部路由时&#xff0c;不会转换成5类LSA&#xff0c…

HarmonyOS系统开发ArkTS常用组件切换按钮及参数

Toggle为切换按钮组件&#xff0c;一般用于两种状态之间的切换&#xff0c;例如下图中的蓝牙开关。 Toggle组件的参数&#xff1a;Toggle(options: { type: ToggleType, isOn?: boolean }) type属性用于设置Toggle组件的类型isOn属性用于设置Toggle组件的状态selectedColor()…

Python网络爬虫的设计与实现研究

Python网络爬虫的设计与实现研究 摘要&#xff1a;随着互联网技术的快速发展&#xff0c;网络爬虫作为获取互联网信息的重要工具&#xff0c;其在数据分析、数据挖掘、自然语言处理等领域的应用越来越广泛。Python语言以其简洁、易读、强大的特点&#xff0c;成为网络爬虫开发…

【前端】Vite项目图片动态引入

我采用的vite构建的vue3项目&#xff0c;没有require命令动态引入本地图片&#xff0c; 引入图片方法如下&#xff1a; 仅供参考 方式1&#xff0c;无法动态 import emptyImage from /assets/home/yd_4.png<img :src"emptyImage" class"h-50 w-50" /&g…

51-31 CVPR’24 | VastGaussian,3D高斯大型场景重建

2024 年 2 月&#xff0c;清华大学、华为和中科院联合发布的 VastGaussian 模型&#xff0c;实现了基于 3D Gaussian Splatting 进行大型场景高保真重建和实时渲染。 Abstract 现有基于NeRF大型场景重建方法&#xff0c;往往在视觉质量和渲染速度方面存在局限性。虽然最近 3D…

Yarn 管理的前端项目转换为使用 npm

如果你想将一个使用 Yarn 管理的前端项目转换为使用 npm&#xff0c;你需要执行一些步骤来确保成功迁移。以下是一种可能的方法&#xff1a; 步骤&#xff1a; 备份项目&#xff1a; 在执行任何更改之前&#xff0c;确保你对项目进行了备份。这样可以防止意外的数据丢失。 删…

docker入门(四)—— docker常用命令详解

docker 常用命令 基本命令 # 查看 docker 版本 docker version # 查看一些 docker 的详细信息 docker info 帮助命令&#xff08;–help&#xff09;&#xff0c;linux必须要会看帮助文档 docker --help[rootiZbp15293q8kgzhur7n6kvZ /]# docker --helpUsage: docker [OPTI…

【C语言】结构体类型名、变量名以及typedef

文章目录 分类判断结构体成员的使用typedef 分类判断 struct tag {char m;int i; }p;假设定义了上面这一个结构体&#xff0c;tag 就是类型名&#xff0c; p 就是变量名&#xff0c; m 和 i 就是结构体成员列表。 可以这么记&#xff0c;括号前面的是类型名&#xff0c;括号后…

【vue核心技术实战精讲】1.1 Vue开篇介绍 + 1.2 Vue的起步 和 插值表达式

文章目录 准备开始适应人群vue 框架学习路线一、vue 基础1、历史介绍2、前端框架与库的区别? 二、vue的起步 和 插值表达式Stage 1&#xff1a;下载包&#xff0c;并放入项目中Stage 2&#xff1a;编码Stage 3&#xff1a;源码 与 效果 准备开始 适应人群 有一定的HTML/CSS/…

vue将中国标准时间转成年月日

vue将中国标准时间转成年月日 datesWed Mar 20 2024 00:00:00 GMT0800 (中国标准时间) const date new Date(dates);const year date.getFullYear();const month (date.getMonth() 1).toString().padStart(2, 0);const day date.getDate().toString().padStart(2, 0);thi…

Android仿智联详情

很久没有发文章了&#xff0c;这一年多一直在卷。最近由于疫情的原因&#xff0c;很多公司都在给员工发“毕业证”&#xff0c;我也很荣幸拿到了“毕业证”。不知道是应该开心还是桑心&#xff0c;北京最近因为疫情基本都居家办公&#xff0c;而我也开始了做简历&#xff0c;刷…