力扣爆刷第135天之数组五连刷(双指针快慢指针滑动窗口)

力扣爆刷第135天之数组五连刷(双指针快慢指针滑动窗口)

文章目录

      • 力扣爆刷第135天之数组五连刷(双指针快慢指针滑动窗口)
      • 一、704. 二分查找
      • 二、27. 移除元素
      • 三、977. 有序数组的平方
      • 四、209. 长度最小的子数组
      • 五、59. 螺旋矩阵 II

一、704. 二分查找

题目链接:https://leetcode.cn/problems/binary-search/description/
思路:经典二分查找算法,每次与中值比较,中值大于target右边界左移,中值小于target左边界右移。

class Solution {public int search(int[] nums, int target) {int left = 0, right = nums.length - 1;while(left <= right) {int mid = left + (right - left) / 2;if(nums[mid] == target) {return mid;}else if(nums[mid] > target) {right = mid - 1;}else{left = mid + 1;}}return -1;}
}

二、27. 移除元素

题目链接:https://leetcode.cn/problems/remove-element/description/
思路:移出相同元素,经典快慢指针,元素不等慢指针才走。

class Solution {public int removeElement(int[] nums, int val) {int slow = 0;for(int i = 0; i < nums.length; i++) {if(nums[i] != val) {nums[slow++] = nums[i];}}return slow;}}

三、977. 有序数组的平方

题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/description/
思路:画了一个非常清晰易懂的图,对含有负数的有序数组进行平方之后的排序,其实平方后就是第二个图形,只需要双指针从两端进行归并排序即可。
在这里插入图片描述

class Solution {public int[] sortedSquares(int[] nums) {int len = nums.length, left = 0, right = len-1;int[] result = new int[len];for(int i = 0; i < len; i++) {nums[i] *= nums[i]; }int k = right;while(left <= right) {if(nums[left] > nums[right]) {result[k--] = nums[left++];}else{result[k--] = nums[right--];}}return result;}
}

四、209. 长度最小的子数组

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/description/
思路:求满足目标和的最短长度子数组,这种题目一看就是滑动窗口,使用快慢指针,快指针扩大窗口,慢指针缩小窗口。

class Solution {public int minSubArrayLen(int target, int[] nums) {int len = nums.length, min = len+1, sum = 0, slow = 0, fast = 0;while(fast < len) {sum += nums[fast++];while(sum >= target) {min = Math.min(min, fast - slow);sum -= nums[slow++];}}return min == len+1 ? 0 : min; }
}

五、59. 螺旋矩阵 II

题目链接:https://leetcode.cn/problems/spiral-matrix-ii/description/
思路:螺旋矩阵非常经典的题目,分别控制四个边界即可。

class Solution {public int[][] generateMatrix(int n) {int[][] nums = new int[n][n];int k = 1, sum = n * n;int left = 0, right = n, up = 0, down = n;while(k <= sum) {if(up < down) {for(int i = left; i < right; i++) {nums[up][i] = k++;}up++;}if(left < right) {for(int i = up; i < down; i++) {nums[i][right-1] = k++;}right--;}if(up < down) {for(int i = right-1; i >= left; i--) {nums[down-1][i] = k++;}down--;}if(left < right) {for(int i = down-1; i >= up; i--) {nums[i][left] = k++;}left++;}}return nums;}
}

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

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

相关文章

力扣HOT100 - 84. 柱状图中最大的矩形

解题思路&#xff1a; 单调栈 对于一个高度height[ i ]&#xff0c;找左右两边均严格小于它的值。 class Solution {public int largestRectangleArea(int[] heights) {int n heights.length;int[] left new int[n];int[] right new int[n];Deque<Integer> mono_st…

Windows下安装Node.js、npm和electronic,并运行一个Hello, World!脚本程序

20240510 By wdhuag 目录 简介&#xff1a; 参考&#xff1a; 安装Node.js 安装npm 配置npm&#xff1a; 修改包存放目录和缓存目录 切换镜像源 使用 nrm 切换镜像源 安装Electron 运行一个Hello, World!脚本程序 安装Yarn JavaScript 指南 简介&#xff1a; Nod…

苹果电脑免费第三方软件CleanMyMac X2025电脑版垃圾清理软件神器

Mac电脑用户在长时间使用电脑之后&#xff0c;时常会看到“暂存盘已满”的提示&#xff0c;这无疑会给后续的电脑使用带来烦恼&#xff0c;那么苹果电脑暂存盘已满怎么清理呢&#xff0c;下面将给大家带来一些干货帮你更好地解决这个问题。 CleanMyMac X2024全新版下载如下: h…

解锁楼宇自动化新维度西门子Insight+BACnet IP I/O控制器

数字城市的楼宇自动化已不再是一个遥不可及的概念&#xff0c;而是成为了现代建筑的标配。特别是在大型商业综合体、高端写字楼和公共设施中&#xff0c;高效的楼宇管理系统是确保环境舒适度与能源效率的关键。当提及楼宇自动化领域的佼佼者&#xff0c;西门子Insight楼宇自动化…

DiskCatalogMaker for Mac:高效管理磁盘文件助手

DiskCatalogMaker for Mac&#xff0c;助您高效管理磁盘文件&#xff0c;让文件整理变得轻而易举&#xff01;这款软件以其出色的性能和人性化的设计&#xff0c;赢得了广大Mac用户的喜爱。 DiskCatalogMaker支持多种磁盘格式&#xff0c;让您轻松管理硬盘、U盘、光盘等存储设备…

Arduino-ILI9341驱动介绍二

Arduino-ILI9341驱动介绍二 1.概述 第一篇文章介绍了Arduino-点亮TFT触摸屏&#xff0c;没有介绍如何改变屏幕的内容。这篇文章介绍Arduino-使用ILI9341驱动控制TFT触摸屏原理和ILI9341驱动源代码设计原理以及常用函数 2.Arduino控制TFT触控屏原理 Arduino使用什么方式控制…

Transformers中加载预训练模型的过程剖析

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…

音频数字信号I2S一些知识理解

(1)I2S单向基本传输需要几根线传输音频信号? 3根线 LRCK SCLK(也叫BLK) DATA(单向) (2)如何理解I2S MASTER或者SLAVE的模式&#xff1f; codec的i2s作为slave mode,LRCK和SCLK来自于soc主控端,codec端自动检测MCLK和LRCK codec的i2s作为master mode,codec通过MCLK LRCLKDIV…

JUC下的CompletableFuture详解

详细介绍 CompletableFuture是Java 8引入的一个实现Future接口的类&#xff0c;它代表一个异步计算的结果。与传统的Future相比&#xff0c;CompletableFuture提供了更丰富的功能&#xff0c;比如链式调用、组合异步操作、转换结果、异常处理等&#xff0c;极大地增强了Java在…

STM32CubeMX软件使用(超详细)

1、Cube启动页介绍 2、芯片选择页面介绍 3、输入自己的芯片型号&#xff0c;这里以STM32U575RIT6举例 4、芯片配置页码介绍 5、芯片外设配置栏详细说明 6、点击ClockConfiguration进行时钟树的配置&#xff0c;选择时钟树后可以选择自己想使用的时钟源&#xff0c;也可以直接输…

H201Ti 数据安装说明

GE H201Ti&#xff0c;即Hydran H201Ti&#xff0c;是一款小型在线预警发射器&#xff0c;专门用于变压器的故障气体监测。 具体来说&#xff0c;Hydran H201Ti的特点和优势包括&#xff1a; 体积小巧&#xff1a;它设计紧凑&#xff0c;便于在有限的空间内安装。易于安装&am…

Linux应用(四)——系统IO函数

本节学习linux系统中常见的IO函数&#xff0c;讲解及其基本用法&#xff1b; 一、 open/close函数 open函数作用:系统调用open函数&#xff0c;打开指定路径的文件&#xff1b; int open(const char *pathname, int flags&#xff09;&#xff1b;打开一个存在的文件&#xff1…