同向双指针(滑动窗口)算法

2024-05-06 18:04

本文主要是介绍同向双指针(滑动窗口)算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

209. 长度最小的子数组

这里的更新结果就题来定

class Solution {public int minSubArrayLen(int target, int[] nums) {int sum = 0;int len = 0;int f = 0;for(int left = 0, right = 0; right < nums.length;){//求和sum += nums[right];while(sum >= target){//lenint t = right - left + 1; if(f == 0 ){len = t;}if(t < len ){len = right - left +1;}f = 1;left++;// if(left >= nums.length){//     break;// }sum -= nums[left-1];}//if(right < nums.length){right++;//}// if(left == nums.length){//     break;// }}return len;}
}

我在处理第一次len得到长度时使用的flag,老师用的时最大值,思路可以借鉴

 

先暴力枚举分析所有情况,做这种题都要这样。根据枚举优化得到滑动窗户做法 

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

 

class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> set = new HashSet<Character>();int n = s.length();int len = 0;for(int left = 0, right = 0; right < n;right++){while(right > 0 && set.contains(s.charAt(right))){set.remove(s.charAt(left));left++;}set.add(s.charAt(right));len = Math.max(len, right -left +1);}return len;}
}

什么时候更新len有点难,多想一下过程的思路 

 

这里用数组来当hash,空间复杂度为O(1),但如果new hash 就是O(N)

1004. 最大连续1的个数 III 

 

 虽然是两层循环,但时间复杂度时O(N),空间复杂度O(1)

1658. 将 x 减到 0 的最小操作数 

class Solution {public int minOperations(int[] nums, int x) {int s= 0;for(int i = 0; i< nums.length; i++){s += nums[i];}int target = s - x, len = 0;if(target == 0){return nums.length;}if(target < 0){return -1;}int f = 0;for(int left = 0, right = 0, sum = 0; right < nums.length; right++ ){sum += nums[right];while(sum >= target){if(sum == target){len = Math.max(len, right - left + 1);sum -= nums[left];left++;f = 1;}else{sum -= nums[left];left++;}}}return f == 1 ? nums.length - len : -1;}
}

如果数组中有0 负数就不能用滑动窗口

这篇关于同向双指针(滑动窗口)算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n