[Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
LeetCode 热题 100---04~07
第一题:移动零
思路
找到每一个为0的元素 然后移到数组的最后 但是需要注意的是 要在给定的数组原地进行修改 并且其他非零元素的相对顺序不能改变 我们采用双指针法
定义两个指针i和j i和j一开始分别都在0索引位置 然后判断j所在位置元素数值 如果等于0 则往下走一位 反之 则将数值赋值到i位置 j和i同时向下走一位
这样子 i总在j后面 j所到的非零元素 都会按照相对顺序依次赋值到i的位置 当j走到重点 i必然还没走到重点(除非整个数组没有0元素) 此时j会停止 而其他非零元素已经全部到达i的前方位置
接下来只需要遍历一遍i~j 将这部分的元素置零即可 大致过程如下(最后将两箭头之间的元素置零即可)

第二题:盛最多水的容器

解法一 暴力法(超时)
最简单直接的方法就是双重for嵌套 依次遍历 两两求体积 最后取最大值即可
思路是可行的 但是在数据量大的情况下 时间超时也是没办法的
class Solution {public int maxArea(int[] height) {if(height.length==1 || height.length==0) return 0;int max=0;for (int i = 0; i < height.length; i++) {for(int j=i+1;j<height.length;j++){int v=(j-i)*Math.min(height[i],height[j]);if(v>max) max=v;}}return max;}
}
解法二 双指针法
首先 我们直到 求两个板子能装水的体积 就是 Min(板A,板B)*AB之间的距离
那么 按照这个思路 我们让AB分别从数组最两端开始 那么可以确定的是我们之后每次都只向内移动变化 那么 AB之间的距离 这个变量就是单调递减的 那么剩下的变化因素就是 Min(板A,板B)
A,B板的移动 都会影响该数值 现在我们来分析 假设我们A板是较短的那块板子
当我们移动A板 即移动短板 A'板的长度可能长于也可能短于A板
如果A'短于A板子 那么Min(A',B)肯定是A' 比Min(A,B)小 AB距离变小 那么整个体积肯定减小
如果A'长于A板子 那么Min(A',B)等于A'或者B(需要看A'和B哪个长) 但是无论如何肯定会比Min(A,B)大 但是AB之间的距离减小 所以最后两者的乘积 体积V的变化情况就不一定了 所以是可能变大 可能变小 可能不变
当我们移动B板 即移动短板 B'板的长度可能长于也可能短于B板
如果B'短于B板子 那么Min(A,B')可能是A也可能是B' 比Min(A,B)小 AB距离变小 那么整个体积肯定减小
如果B'长于B板子 因为短板效应 那么Min(A,B')还是等于A 但是AB之间距离减小 所以体积一定减小
综上 移动长版 体积一定减小 移动短板 体积可能变大
所以 我们双指针可以分别从两端开始 每次移动短的那一块 然后记录出最大体积值即可
class Solution {public int maxArea(int[] height) {if(height.length==0||height.length==1) return 0;int i=0;int v=0;int j=height.length-1;int max=0;while(i<j){if(height[i]>height[j]){v=height[j]*(j-i);j--;}else{v=height[i]*(j-i);i++;}if(v>max) max=v;}return max;}
}

第三题:三数之和

思路
首先是要记得特殊情况直接判断length小于3和数组为null直接范围[]
然后 如果整个数组的最小数都大于0 那么也可以直接返回 所以这就需要我们实现排序
然后对于正常情况 即我们要找到三个数 使其和等于0 最简单直接的 当然是for循环的嵌套
很容易理解和实现 但是时间复杂度肯定是很大的
为了简化寻找的过程 我们只需要一个循环数 其他的都用固定表达式表示即可
假设我们对数组进行了排序 我们让i从0开始遍历 然后定义变量j=i+1 g=length-1作为双指针 我们在用i遍历的时候 每到一个位置 我们需要在j和g之间遍历找数据
每次计算出nums[i]+nums[j]+nums[g]来判断是否等于0 因为整个数组是有序的 那么我们就可以根据和0的大小比较来直到该如何移动j和g 小于动j 大于动g
(思想类似于[Java][算法 哈希]Day 01---LeetCode 热题 100---01~03-CSDN博客中第一大题的移动思想)
class Solution {public List<List<Integer>> threeSum(int[] nums) {if(nums.length<3||nums==null) return new ArrayList<>();List<List<Integer>> list=new ArrayList<>();Arrays.sort(nums);int i=0;for(i=0;i<nums.length;i++){// 去重if(i>0 && nums[i]==nums[i-1]) continue;int j=i+1,g=nums.length-1;if(nums[i]>0) break;while(j<g){int sum=nums[i]+nums[j]+nums[g];if(sum==0){list.add(Arrays.asList(nums[i],nums[j],nums[g]));while(j < g && nums[j] == nums[j+1]) {j++;}while(j< g && nums[g] == nums[g-1]){g--;}j++;g--;}else if(sum>0){g--;}else if(sum<0){j++;}}}return list;}
}
第四题:接雨水
思路
对于这个题目 我们不应该集中想法去整体求值 而应该去想办法如何单独求出每一个的值 然后相加
对于每一个位置 i 能达到的水柱高度和其左边的最高柱子、右边的最高柱子有关,我们分别称这两个柱子高度为 l_max 和 r_max;位置 i 最大的水柱高度就是 min(l_max, r_max)*height[i]

根据这个思路 我们就知道 需要在遍历的时候 找到该位置的左右两边的最高的柱子 然后又选左右两边最高的中的较小的那个
解法一:暴力法
int trap(int[] height) {int n = height.length;int res = 0;for (int i = 1; i < n - 1; i++) {int l_max = 0, r_max = 0;// 找右边最高的柱子for (int j = i; j < n; j++)r_max = Math.max(r_max, height[j]);// 找左边最高的柱子for (int j = i; j >= 0; j--)l_max = Math.max(l_max, height[j]);// 如果自己就是最高的话,// l_max == r_max == height[i]res += Math.min(l_max, r_max) - height[i];}return res;
}
解法二:双指针法
我们利用双指针 一个从最左边移动 一个从最右边移动 边走边算的模式
每次走到一个点 先比较该点数值和历史记录的最大值 用于及时更新最大值
更新完最大值之后 比较两边的最大值 取出较小的那个进行计算 最后再移动小的那个
(因为计算是去小数值的 那么计算完之后代表该次计算完成 只有移动小的才能保证不忽略 不重复)
class Solution {int trap(int[] height) {int left = 0, right = height.length - 1;int l_max = 0, r_max = 0;int res = 0;while (left < right) {l_max = Math.max(l_max, height[left]);r_max = Math.max(r_max, height[right]);// res += min(l_max, r_max) - height[i]if (l_max < r_max) {res += l_max - height[left];left++;} else {res += r_max - height[right];right--;}}return res;}
}
相关文章:
[Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
LeetCode 热题 100---04~07 第一题:移动零 思路 找到每一个为0的元素 然后移到数组的最后 但是需要注意的是 要在给定的数组原地进行修改 并且其他非零元素的相对顺序不能改变 我们采用双指针法 定义两个指针i和j i和j一开始分别都在0索引位置 然后判断j所…...
【问题解决】如何将一个服务器的docker迁移到另一个服务器
要将Docker容器从一台机器迁移到另一台机器,可以按照以下步骤操作: 在机器A上提交容器为镜像: 使用docker commit命令将运行中的容器保存为新的镜像。这里需要容器的ID或名称,以及你想要命名的目标镜像名。 docker commit [容器…...
C++单例模式详解
目录 0. 前言 1. 懒汉式单例模式 1.1 最简单的单例模式 1.2 防止内存泄漏 1.2.1 智能指针的方法 1.2.2 静态嵌套的方法 1.3 保证线程安全 1.4 C11版本的优雅解决方案 2. 饿汉式单例模式 0. 前言 起因是在程序中重复声明了一个单例模式的变量,后来程序怎么调…...
LLM应用开发与落地:流式响应
一、背景 最近智能客服产品给到一个游戏客户那边,客户那边的客服负责人体验后认为我们产品回答的准确率是还是比较高的。同时,他反馈了几个需要改进的地方,其中一个就是机器人回复慢。机器人回复慢有很多原因,也有优化方式&#…...
神经网络 | 基于 CNN 模型实现土壤湿度预测
Hi,大家好,我是半亩花海。在现代农业和环境监测中,了解土壤湿度的变化对于作物生长和水资源管理至关重要。通过深度学习技术,特别是卷积神经网络,我们可以利用过去的土壤湿度数据来预测未来的湿度趋势。本文将使用 Pad…...
江科大STM32 终
目录 SPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件外设读写W25Q64 BKP备份寄存器、PER电源控制器、RTC实时时钟11.0 Unix时间戳代码示例:读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR电源控制12.1 PWR简介代码示例:修改主频12.3 串…...
《MySQL 简易速速上手小册》第10章:未来趋势和进阶资源(2024 最新版)
文章目录 10.1 MySQL 在云计算和容器化中的应用10.1.1 基础知识10.1.2 重点案例:使用 Python 部署 MySQL 到 Kubernetes10.1.3 拓展案例 1:在 AWS RDS 上部署 MySQL 实例10.1.4 拓展案例 2:使用 Docker 部署 MySQL 10.2 MySQL 和 NoSQL 的整合…...
Stable Diffusion 模型下载:GhostMix(幽灵混合)
文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 GhostMix 是绝对让你惊艳的模型,也是自己认为现在最强的2.5D模型。我认为模型的更新应该是基于现有的画面整体不大变的前提下,提高模型的成…...
django解决Table ‘xx‘ already exists的方法
1,首先看已存在的这个库表结构是什么样的,先让对应的model.py恢复到和他一样的字段 2,删除对应app下的migrations目录里面除__init__.py文件的其他所有文件 3,回到manage.py所在目录执行python manage.py makemigrations 4&#x…...
qt学习:arm摄像头+c调用v412框架驱动+qt调用v412框架驱动 显示摄像头画面
目录 跟内核进行数据通信的函数 编程步骤 c代码 头文件 打开摄像头文件 /dev/videox 获取当前主机上(开发板)摄像头列表信息 设置当前摄像头的画面格式 比如说 设置 采集图像的宽度为640 高度 480 在内核空间中,申请一个缓冲区队列…...
Linux 36.2@Jetson Orin Nano基础环境构建
Linux 36.2Jetson Orin Nano基础环境构建 1. 源由2. 步骤2.1 安装NVIDIA Jetson Linux 36.2系统2.2 必备软件安装2.3 基本远程环境2.3.1 远程ssh登录2.3.2 samba局域网2.3.3 VNC远程登录 2.4 开发环境安装 3. 总结 1. 源由 现在流行什么,也跟风来么一个一篇。当然&…...
牛客网SQL264:查询每个日期新用户的次日留存率
官网链接: 牛客每个人最近的登录日期(五)_牛客题霸_牛客网牛客每天有很多人登录,请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login。题目来自【牛客题霸】https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8?tpId82 …...
echarts 曲线图自定义提示框
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>曲线图</title><!-- 引入 ECharts 库 -->…...
幻兽帕鲁服务器怎么搭建?Palworld多人联机教程
玩转幻兽帕鲁服务器,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元,阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…...
DAY39: 动态规划不同路径问题62
Leetcode: 62 不同路径 机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。 基本思路 1、确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条…...
idea开发工具的简单使用与常见问题
1、配置git 选择左上角目录file->setting 打开,Version Control 目录下Git,选择git安装目录下的git.exe文件; 点击test,出现git版本,则表示git识别成功,点击右下角确认即可生效。 2、配置node.js 选…...
使用 WMI 查询安全软件信息
在这篇文章中,我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分,并解释每个步骤所涉及的技术和原理。 一、什么是 WMI? WMI 是 Windows Manag…...
创建TextMeshPro字体文件
相比于Unity的Text组件,TextMesh Pro提供了更强大的文本格式和布局控制,更高级的文本渲染技术,更灵活的文本样式和纹理支持,更好的性能以及更易于使用的优点。但unity自带TextMeshPro字体不支持中文。这里使用普通字体文件生成Tex…...
信创ARM架构QT应用开发环境搭建
Linux ARM架构QT应用开发环境搭建 前言交叉工具链Ubuntu上安装 32 位 ARM 交叉工具链Ubuntu上安装 64 位 ARM 交叉工具链 交叉编译 QT 库下载 QT 源码交叉编译 QT 源码 Qt Creator交叉编译配置配置 Qt Creator Kits创建一个测试项目 小结 前言 有没有碰到过这种情况࿱…...
使用SPM_batch进行批量跑脚本(matlab.m)
软件:spm8matlab2023bwin11 数据格式: F:\ASL\HC\CBF\HC_caishaoqing\CBF.nii F:\ASL\HC\CBF\HC_caishaoqing\T1.nii F:\ASL\HC\CBF\HC_wangdonga\CBF.nii F:\ASL\HC\CBF\HC_wangdonga\T1.nii clear spmdirD:\AnalysisApps\spm8; datadirF:\ASL\HC\CBF…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
