算法| ss 滑动窗口

  • 3.无重复字符的最长子串
  • 209.长度最小的子数组
  • 1052.爱生气的书店老板
    1. 水果成篮
    1. 删除子数组的最大得分

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

/*** @param {string} s* @return {number}*/
// 思路
// 滑窗三问三答
// 右指针是谁
// 左指针什么时候移动 偏爱while循环
// 结果更新
var lengthOfLongestSubstring = function (s) {let len = 0;let left = 0;const sets = new Set();for (let right = 0; right < s.length; right++) {let ch = s[right];while (sets.has(ch)) {let leftch = s[left];sets.delete(leftch);left += 1;}sets.add(ch);len = Math.max(len, right - left + 1);}//   console.log(len);return len;
};
lengthOfLongestSubstring("abcabcbb");

209.长度最小的子数组

/*** @param {number} target* @param {number[]} nums* @return {number}*/
// 思路
// 三问三答
// for  while循环
// 相等时更新最小值
// 是大于等于 不是等于
var minSubArrayLen = function (target, nums) {let minLen = Infinity;let left = 0;let sum = 0;for (let right = 0; right < nums.length; right++) {let ch = nums[right];sum += ch;while (sum >= target && left <= right) {let leftCh = nums[left];minLen = Math.min(minLen, right - left + 1);sum -= leftCh;left += 1;}}//   console.log(minLen);return minLen === Infinity ? 0 : minLen;
};
// minSubArrayLen(7, [2, 3, 1, 2, 4, 3]);
// minSubArrayLen(4, [1, 4, 4]);
minSubArrayLen(11, [1, 2, 3, 4, 5]);

1052.爱生气的书店老板

/*** @param {number[]} customers* @param {number[]} grumpy* @param {number} minutes* @return {number}*/
// 思路
// 先将不生气的时候的客户加起来, 再重置为0
// 对重置后的客户数组进行求 连续minutes 个数的最大值
var maxSatisfied = function (customers, grumpy, minutes) {let ans = 0;let n = customers.length;for (let i = 0; i < n; i++) {if (grumpy[i] === 0) {ans += customers[i];customers[i] = 0;}}//   [//     0, 0, 0, 2,//     0, 1, 0, 5//   ]let sum = 0;let max = 0;for (let i = 0; i < n; i++) {sum += customers[i];if (i >= minutes) {sum -= customers[i - minutes];}max = Math.max(max, sum);}console.log(max);console.log(ans + max);console.log(customers);return ans + max;
};
// maxSatisfied([1, 0, 1, 2, 1, 1, 7, 5], [0, 1, 0, 1, 0, 1, 0, 1], 3);
maxSatisfied([9, 10, 4, 5], [1, 0, 1, 1], 1);
// customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], minutes = 3

904. 水果成篮

/*** @param {number[]} fruits* @return {number}*/
// 思路
// 滑动窗口解决
// for循环遍历 hash统计
// while循环 查看key的数量是否超过了2,如果超过,哈希统计更新。 左指针右移
// 更新答案
var totalFruit = function (fruits) {let ans = 0;let left = 0;const map = {};for (let right = 0; right < fruits.length; right++) {let ch = fruits[right];map[ch] = (map[ch] ?? 0) + 1;while (Object.keys(map).length > 2) {let leftCh = fruits[left];map[leftCh] -= 1;if (map[leftCh] === 0) delete map[leftCh];left += 1;}ans = Math.max(ans, right - left + 1);}console.log(ans);return ans;
};
totalFruit([0, 1, 2, 2]);// 输入:fruits = [0,1,2,2]
// 输出:3
// 解释:可以采摘 [1,2,2] 这三棵树。

1695. 删除子数组的最大得分

/*** @param {number[]} nums* @return {number}*/
// 思路
// 滑窗3步曲解决
// 使用Set进行统计
var maximumUniqueSubarray = function (nums) {let left = 0;let sets = new Set();let sum = 0;let ans = 0;for (let right = 0; right < nums.length; right++) {sum += nums[right];while (sets.has(nums[right])) {sum -= nums[left];sets.delete(nums[left]);left += 1;}sets.add(nums[right]);ans = Math.max(ans, sum);}console.log(ans);return ans;
};
maximumUniqueSubarray([4, 2, 4, 5, 6]);// 输入:nums = [4,2,4,5,6]
// 输出:17
// 解释:最优子数组是 [2,4,5,6]

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

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

相关文章

MacOS Docker 可视化面板 Portainer

一、简介 Portainer 是一个可视化的容器镜像图形管理工具&#xff0c;使用 Portainer 可以轻松构建、管理和维护Docker 环境。 而且完全免费&#xff08;portainer-ce 是免费的&#xff0c;portainer-ee 是需要授权的&#xff0c;今天安装的是 portainer-ce 版本&#xff09;&…

leetcode599-Minimum Index Sum of Two Lists

题目 假设 Andy 和 Doris 想在晚餐时选择一家餐厅&#xff0c;并且他们都有一个表示最喜爱餐厅的列表&#xff0c;每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个&#xff0c;则输出所有答案并且不考虑顺序。 你可以假…

Java多态练习2

设计金融产品类Financial&#xff0c;属性包括产品名称、产品介绍、起投金额、产品期限&#xff08;int&#xff09;、年化收益&#xff08;百分数&#xff09;&#xff1b;方法包括发布、截止、投资。 设计金融产品类子类&#xff1a; 基金产品Fund&#xff0c;继承金融产品类…

Jenkins (三) - 拉取编译

Jenkins (三) - 拉取编译 通过Jenkins平台 git 拉取github上项目&#xff0c;通过maven编译并打包。 Jenkins 安装 git 插件 Manager Jenkins -> Plugins -> Available plugins -> Git 打包编译检验 FressStyle 风格编译 New Item输入 item name Spring-Cloud-1…

LeetCode---127双周赛

题目列表 3095. 或值至少 K 的最短子数组 I 3096. 得到更多分数的最少关卡数目 3097. 或值至少为 K 的最短子数组 II 3098. 求出所有子序列的能量和 一、或值至少k的最短子数组I&II 暴力的做法大家都会&#xff0c;这里就不说了&#xff0c;下面我们来看看如何进行优化…

JDK1.8 有哪些新特性

JDK 1.8引入了多个新特性&#xff0c;显著改善了Java语言的函数式编程能力、集合操作和日期时间处理。以下是一些主要的新特性&#xff1a; Lambda表达式: Lambda表达式提供了一种清晰简洁的方式来表示一段可执行的代码&#xff0c;允许将函数作为参数传递给方法。 // 之前的…

1、快速上手Docker:入门指南

文章目录 Linux中安装docker防火墙端口配置web项目需要的环境安装yarn安装nodejs安装脚手架并准备项目 构建镜像启动镜像查看日志管理镜像推送镜像 发布项目准备服务器环境部署项目&#xff1a; PS&#xff1a;扩展一点小知识 这篇文章只是docker入门的第一个Docker项目&#x…

STM32使用HAL库获取GPS模块HT1818Z3G5L信息(方法1)

1、写在最前 先了解一下GPRMC的格式 格 式&#xff1a; GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50 说 明&#xff1a; 字段 0&#xff1a;$GPRMC&#xff0c;语句ID&#xff0c;表明该语句为Recommended Minimum Specific GPS/TRANSIT Data&…

数据结构|排序总结(1)|直接插入排序

排序分类 插入排序&#xff1a;直接插入排序&#xff0c;希尔排序 选择排序&#xff1a;选择排序&#xff0c;堆排序 交换排序&#xff1a;冒泡排序&#xff0c;快速排序 归并排序 插入排序 直接插入排序 相当于摸牌&#xff0c;例如我们现在手上有{2&#xff0c;4&#xff0…

AcWing 2099. 找到和最大的长度为 K 的子序列

解题思路 用数组来保存数字的出现次数。hash和set不能保存相同的键值&#xff0c;这种情况下只能用数组。 相关代码 class Solution {public int[] maxSubsequence(int[] nums, int k) {int a[] new int[nums.length];for(int i0;i<nums.length;i) a[i] nums[i];Arrays…

C/C++ 查泄漏得一些方法

在 C/C 之中内存泄漏一直是个老大难问题&#xff0c;但索性用于辅助定位查找得解决方案也不少&#xff0c;虽然没那么详细&#xff0c;但总比没有要好的多。 有一些是用三方工具来查得&#xff0c;但这个需要编译debug&#xff0c;带上符号信息得版本才可以&#xff0c;就很麻烦…

volatile 能一个非原子操作变成原子操作吗

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:volatile 能一个非原子操作变成原子操作吗 volatile 关键字在 Java 中主要用于确保多线程环境下的可见性和禁止指令重排序,但它并不能使一个非原…

碘浊度法与红外相机联用测定食品中维生素C

&#x1f31e;欢迎来到看论文的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年4月6日&…

从新手到专家:精通MacOS上的Homebrew安装

I. 前言 在介绍如何精通MacOS上的Homebrew安装之前&#xff0c;首先需要了解什么是Homebrew以及为什么要使用它。 1. Homebrew是什么&#xff1f; Homebrew是一款开源的软件包管理工具&#xff0c;可以让用户轻松地安装、升级和卸载各种软件包。与其他的软件包管理器相比&am…

PostCss:详尽指南之安装和使用

引言 在现代前端开发中&#xff0c;CSS预处理器如Sass、Less等已经成为提升开发效率、增强代码可维护性的重要工具。然而&#xff0c;随着Web技术的发展&#xff0c;CSS的功能也在不断扩展&#xff0c;一些新的CSS语法&#xff08;如变量、自定义属性、CSS Grid等&#xff09;以…

5.112 BCC工具之ext4slower.py解读

一,工具简介 ext4slower可以显示慢于阈值的ext4读取、写入、打开和fsync操作。 该工具追踪常见的ext4文件操作:读取、写入、打开和同步。它统计在这些操作中花费的时间,并打印超过阈值的每个操作的详细信息。 默认情况下,使用的最小毫秒阈值为10。 二,代码示例 #!/us…

霍兰德职业兴趣测试:发掘你的工作激情与天赋(包含开源免费的API接口)

霍兰德倾向测验的原理 霍兰德职业倾向测验&#xff0c;它是美国著名职业指导专家J&#xff0e;霍兰德&#xff08;HOLLAND&#xff09;编制的&#xff0c;他的职业选择理论把职业分为六种不同类型&#xff0c;即现实型、研究型、艺术型、社会型、企业型、常规型。霍兰德认为&a…

数据库的简单查询

一、检索一列或多列1.检索单独一列 select 列名 from 表名; select order_num from orders; 2.检索多列数据 select 列 1&#xff0c;列 2... from 表名; select order_num,order_date from orders; select order_date,order_num from orders; 3.查询所有字段 select * from…

正排索引 vs 倒排索引 - 搜索引擎具体原理

阅读导航 一、正排索引1. 概念2. 实例 二、倒排索引1. 概念2. 实例 三、正排 VS 倒排1. 正排索引优缺点2. 倒排索引优缺点3. 应用场景 三、搜索引擎原理1. 宏观原理2. 具体原理 一、正排索引 1. 概念 正排索引是一种索引机制&#xff0c;它将文档或数据记录按照某种特定的顺序…

security如何不拦截websocket

只要添加一个关键配置就行 //忽略websocket拦截Overridepublic void configure(WebSecurity webSecurity){webSecurity.ignoring().antMatchers("/**");} 全部代码我放着了 package com.oddfar.campus.framework.config;import com.oddfar.campus.framework.secur…