算法| ss 双指针

  • 11.盛水最多的容器
  • 15.三数之和
  • 26.删除有序数组中的重复项
  • 27.移除元素
  • 75.颜色分类
  • 88.合并两个有序数组
  • 167.两数之和2-输入有序数组
  • 581.最短无序连续子数组
  • 2486.追加字符以获得子序列

11.盛水最多的容器

/*** @param {number[]} height* @return {number}*/
// 思路
// 左0 右 n-1
// while left<right
// 计算宽度right-left
// 左边大: 右高乘以width  右--
// 右边大: 左高乘以width 左++
// 指针移动: 谁小谁移动
// 更新最大值
var maxArea = function (height) {let left = 0;let right = height.length - 1;let ans = 0;while (left < right) {let width = right - left;if (height[left] > height[right]) {val = width * height[right];ans = Math.max(ans, val);right -= 1;} else {val = width * height[left];ans = Math.max(ans, val);left += 1;}}console.log(ans);
};
maxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]);
// 输入:[1,8,6,2,5,4,8,3,7]
// 输出:49

15.三数之和

/*** @param {number[]} nums* @return {number[][]}*/
// 思路
//  数组升序(很重要)
// 计算公式:  定个首元素  +  左元素 + 右元素 = 0
// for循环定义首元素
// while循环 变更左右指针, 确定左右元素
// total <0 left++  total> 0 rigth++
// total==0 更新结果, 并且剪枝 如果左==左+1  左++   右=右-1 右--
var threeSum = function (nums) {nums.sort((a, b) => a - b);let ans = [];for (let i = 0; i < nums.length; i++) {let startNum = nums[i];let left = i + 1;let right = nums.length - 1;if (startNum > 0) continue;if (i > 0 && startNum === nums[i - 1]) continue;while (left < right) {let total = startNum + nums[left] + nums[right];if (total < 0) {left += 1;} else if (total > 0) {right -= 1;} else {ans.push([startNum, nums[left], nums[right]]);// 剪枝避免重复元素while (left < right && nums[left] === nums[left + 1]) left += 1;while (left < right && nums[right] === nums[right - 1]) right -= 1;left += 1;right -= 1;}}}//   console.log("ans", ans);return ans;
};
// [ -4, -1, -1, 0, 1, 2 ]
threeSum([-1, 0, 1, 2, -1, -4]);// 输入:nums = [-1,0,1,2,-1,-4]
// 输出:[[-1,-1,2],[-1,0,1]]

26.删除有序数组中的重复项

/*** @param {number[]} nums* @return {number}*/
// 思路
// 双指针解法
// for循环 right从1开始
// 当left right对应的值不相等时, left递增1, 并且对应值赋值为right对应的值
var removeDuplicates = function (nums) {let left = 0;for (let right = 1; right < nums.length; right++) {if (nums[left] !== nums[right]) {left += 1;nums[left] = nums[right];}}console.log(left + 1);return left + 1;
};
removeDuplicates([0, 0, 1, 1, 1, 2, 2, 3, 3, 4]);

27.移除元素

/*** @param {number[]} nums* @param {number} val* @return {number}*/
// 思路
// 双指针解法
// for遍历数组
// 条件: 当遍历值不等于val时, 设置num[i]为遍历值,并指针右移
// 都是不利用任何api,只是更改数组下标的方式得到结果
var removeElement = function (nums, val) {let i = 0;for (let j = 0; j < nums.length; j++) {if (nums[j] !== val) {nums[i] = nums[j];i += 1;}}return i;
};
removeElement([3, 2, 2, 3], 3);
// nums = [3,2,2,3], val = 3

75.颜色分类

88.合并两个有序数组

/*** @param {number[]} nums1* @param {number} m* @param {number[]} nums2* @param {number} n* @return {void} Do not return anything, modify nums1 in-place instead.*/
// 思路
// 定义两个数组的尾指针
// whiile 循环比较尾指针值大小
// 分别填充比较后的数值, 指针左移
// for循环nums2  填充, 补充前面的数据(针对num2的长度比num1长)
var merge = function (nums1, m, nums2, n) {let firstPoint = m - 1;let secondPoint = n - 1;//   倒序 从尾部比较2个数组,填充, 指针左移while (firstPoint >= 0 && secondPoint >= 0) {if (nums1[firstPoint] > nums2[secondPoint]) {nums1[firstPoint + secondPoint + 1] = nums1[firstPoint];firstPoint -= 1;} else {nums1[firstPoint + secondPoint + 1] = nums2[secondPoint];secondPoint -= 1;}}//   num1比num2短的情况下if (secondPoint >= 0) {for (let i = 0; i < secondPoint; i++) {nums1[i] = nums2[i];}}
};// 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
// 输出:[1,2,2,3,5,6]
// 解释:需要合并 [1,2,3] 和 [2,5,6] 。
// 合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

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

581. 最短无序连续子数组

/*** @param {number[]} nums* @return {number}*/
// 思路: 双指针解法
// while循环 从左 从右遍历 找到 left right边界
// for循环left right 找到其中的最大值 最小值
// 确定左右指针的最终位置, left比min小  max 比right小
// 更新结果 right-left -1var findUnsortedSubarray = function (nums) {let len = nums.length;let left = 0;let right = len - 1;while (left < len && nums[left] <= nums[left + 1]) left++;while (right >= 0 && nums[right - 1] <= nums[right]) right--;let min = Infinity;let max = -Infinity;for (let i = left; i <= right; i++) {min = Math.min(min, nums[i]);max = Math.max(max, nums[i]);}while (nums[left] > min) left--;while (nums[right] < max) right++;console.log(left, right);return left < right ? right - left - 1 : 0;
};
console.log(findUnsortedSubarray([2, 6, 4, 8, 10, 9, 15]));
console.log(findUnsortedSubarray([1, 3, 2, 2, 2]));
// 输入:nums = [2,6,4,8,10,9,15]
// 输出:5

2486. 追加字符以获得子序列

/*** @param {string} s* @param {string} t* @return {number}*/
// 思路
// 双指针解法
// 遍历字符串s , 如果s某个字符等于t的某个字符,则i++
// 更新结果n-i
var appendCharacters = function (s, t) {const n = t.length;let i = 0;for (let j = 0; j < s.length; j++) {if (s[j] === t[i]) {i++;}}console.log(n - i);return n - i;
};
appendCharacters("coaching", "coding");
// 输入:s = "coaching", t = "coding"
// 输出:4

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

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

相关文章

【环境变量】常见的环境变量 | 相关指令 | 环境变量系统程序的结合理解

目录 常见的环境变量 HOME PWD SHELL HISTSIZE 环境变量相关的指令 echo&env export unset 本地变量 环境变量整体理解 程序现象_代码查看环境变量 整体理解 环境变量表 环境变量表的传递 环境变量表的查看 测试验证 少说废话&#x1f197; 每个用户…

48V转15V,48V转12V,48V转24V高效率降压恒压芯片SL3041电路简单

在现代电子设备中&#xff0c;电源转换是一个关键且常见的技术。特别是对于那些需要将48V电压转换为更低电压&#xff08;如15V、12V或24V&#xff09;的设备&#xff0c;一个高效、可靠的降压恒压芯片至关重要。本文将详细介绍一款名为SL3041的高效率降压恒压芯片&#xff0c;…

C++ P1152 欢乐的跳

文章目录 一、题目描述欢乐的跳题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 二、参考代码 一、题目描述 欢乐的跳 题目描述 一个 n n n 个元素的整数数组&#xff0c;如果数组两个连续元素之间差的绝对值包括了 [ 1 , n −…

#{} 和 ${}区别

1、参数是Integer类型时候没区别&#xff08;#是预编译SQL&#xff0c;$是即时SQL&#xff09; 2、当参数是String类型时&#xff0c;就会出错了 &#xff08;1&#xff09;这是$的报错信息&#xff0c;因为我们的参数admin并没有加引号所以不满足字符串条件 (2)正确的SQL &am…

蓝牙学习十(扫描)

一、简介 从之前的文章中我们知道&#xff0c;蓝牙GAP层定义了四种角色&#xff0c;广播者&#xff08;Broadcaster&#xff09;、观察者&#xff08;Observer&#xff09;、外围设备&#xff08;Peripheral&#xff09;、中央设备&#xff08;Central&#xff09;。 之前的学习…

基础总结篇:Activity生命周期

private int param 1; //Activity创建时被调用 Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, “onCreate called.”); setContentView(R.layout.lifecycle); Button btn (Button) findViewById(R.id.…

在JS中通过样式构建三角形的方法

第一种方法&#xff1a; .triangle {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid blue; /* 三角形的颜色 */ }.triangle 类定义了一个零宽高的块级元素&#xff0c;并通过设置边框的样式来创建…

Python实现 AI 绘图(非常详细)零基础入门到精通,收藏这一篇就够了

今天给大家带来了 Python 对接阿里大模型&#xff0c;通过 AI 实现文本生成图片。 相关资料 这个功能使用的主要 API 是阿里的大模型服务。 开通服务 阿里文档 https://help.aliyun.com/zh/dashscope/developer-reference/quick-start-1?disableWebsiteRedirecttrue 获取 a…

K8S之Job和CronJob控制器

这里写目录标题 Job概念适用场景使用案例 CronJob概念适用场景使用案例 Job 概念 Job控制器用于管理Pod对象运行一次性任务&#xff0c;例如&#xff1a;对数据库备份&#xff0c;可以直接在k8s上启动一个mysqldump备份程序&#xff0c;也可以启动一个pod&#xff0c;这个pod…

Day3-HBase重要概念

HBase 结构 HRegion 概述 在HBase中&#xff0c;会从行键方向上对表来进行切分&#xff0c;切分出来的每一个结构称之为是一个HRegion 切分之后&#xff0c;每一个HRegion会交给某一个HRegionServer来进行管理。HRegionServer是HBase的从节点&#xff0c;每一个HRegionServ…

C++ 内存分配时地址对齐

如果数据地址的对齐与CPU相兼容&#xff0c;那么CPU读写内存时性能会更高。 因此在C中&#xff0c;有时会希望在堆或栈中分配内存时&#xff0c;返回的地址能按照特定的长度对齐。 如果希望在栈中分配的内存时&#xff0c;返回地址按照特定长度对齐&#xff0c;可以使用 alig…

光伏接口转接器配合光伏规约转换器实现发电用电信息采集支持接入各个型号逆变器

1.产品概述 DAQ-GP-485PIA光伏接口转接器&#xff08;以下简称转接器&#xff09;是我公司针对光伏发电领域国家电网公司最新需求设计的&#xff0c;光伏接口转接器是配合光伏规约转换器&#xff0c;实现逆变器发电、用电信息采集的设备。支持锦浪、古瑞瓦特、固德威、华为、奥…

阿里云数据库RDS MySQL实例删除ONLY_FULL_GROUP_BY参数值

概述 阿里云云数据库RDS MySQL实例中&#xff0c;如何删除sql_mode参数的ONLY_FULL_GROUP_BY值。 详细信息 阿里云提醒您&#xff1a;如果您对实例或数据有修改、变更等风险操作&#xff0c;务必注意实例的容灾、容错能力&#xff0c;确保数据安全。如果您对实例&#xff08;…

大模型现有领域研究

分类参考https://csdnnews.blog.csdn.net/article/details/137337597?spm1000.2115.3001.5926&ydrefereraHR0cHM6Ly93d3cuY3Nkbi5uZXQv 对现有领域热点进行总结&#xff0c;后续会基于这些进行补充&#xff0c;会对其中的名词进行解释。 开始编辑日期2024/4//4&#xff…

提升团队工程交付能力,从“看见”工程活动和研发模式开始

作者&#xff1a;张裕、雅纯 理想中的研发团队应当具有以下特征&#xff1a; 总是工作在最高优先级的事项上 理想的研发团队能够识别并始终集中精力在当前最紧迫和最有价值的任务上。这需要团队具备出色的项目管理能力和决策能力&#xff0c;以便能够正确评估优先级&#xff0…

Vue 项目如何在VSCode中进行断点调试

概要&#xff1a; 简单介绍一下&#xff0c;在VSCode中如何对Vue项目进行断点调试。具体内容包括但不限于&#xff1a;如何配置调试环境、如何在代码中设置断点、如何启动调试以及如何解决在调试过程中可能遇到的问题。 实际开发中&#xff0c;我们的前端项目一般都是在浏览器…

算法 day28 回溯4

93 复原IP地址 给定一个只包含数字的字符串 s &#xff0c;用以表示一个 IP 地址&#xff0c;返回所有可能的有效 IP 地址&#xff0c;这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。 有效 IP 地址 正好由…

设计模式:享元模式案例

让我们以游戏开发中的棋类游戏&#xff08;例如国际象棋&#xff09;为例来展示享元模式的代码实现。在这个例子中&#xff0c;棋子的类型是内部状态&#xff0c;而棋子的位置是外部状态。 Java 代码示例 import java.util.HashMap; import java.util.Map;// 享元接口 interf…

windows 系统下 mysql 数据库的下载与安装(包括升级安装)

windows 系统下 mysql 数据库的下载与安装&#xff08;包括升级安装&#xff09; 一、mysql 介绍&#xff1a; MySQL 是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。 MySQL 是最流行的关系型数据库管理系统之一&#xf…

Springboot的事务管理

在Service层的方法头顶上加上Transactional 声明这个方法是个事务&#xff0c;要么都成功&#xff0c;要么都失败。 这经常用于批量操作&#xff0c;避免第一次没成功&#xff0c;执行第二次的时候重复插入相同数据&#xff0c;或者有些插入删除操作未被执行&#xff0c;就开…