【LeetCode】九、双指针算法:环形链表检测 + 救生艇

文章目录

  • 1、双指针算法
    • 1.1 对撞双指针
    • 1.2 快慢双指针
  • 2、leetcode141:环形链表
  • 3、leetcode881:救生艇

1、双指针算法

用两个指针来共同解决一个问题:

在这里插入图片描述

1.1 对撞双指针

比如先有一个有序的数组array

int[] array = {1, 4, 5, 7, 9}

先要找两个数,使得其和为12,且两个数不能相同。最先想到的是,两层循环,遍历array,如外层 i = 1,内层循环 j = 4 5 7 9,外层 i = 4,内层循环 j = 1 5 7 9……,但这样时间复杂度为O(n^2)。用对撞双指针优化:

在这里插入图片描述

在这里插入图片描述
对撞前即p1 <= p2,p1 = p2时,说明二者指向同一个元素,再往下就错开了。

1.2 快慢双指针

比如现在要检测一个链表是否为环形:

在这里插入图片描述

此时可用快慢双指针,慢的一次走一步,s = s.next,快的一次走两步,f = f.next.next,二者同时从队首出发:

在这里插入图片描述

移动三次后,快慢指针相遇了,这说明是个环形,否则二者不会相遇。

2、leetcode141:环形链表

在这里插入图片描述
和上面的快慢指针一样,代码实现:

public class P141 {public static boolean checkCycle(ListNode head) {if (null == head) {return false;}// 快慢指针,均从头节点开始ListNode slowPoint = head;ListNode fastPoint = head;// 这里的条件无需判断慢指针,如果是环形,大家都不为null// 如果不是环形,那一定是快指针先走完而出现null// 因此退出循环的条件是:快指针走完了,而快指针一次两步,所以走完的条件是当前已为空或者不够两步了while(fastPoint != null && fastPoint.next != null) {// 慢指针一次一步,快指针一次两步slowPoint = slowPoint.next;fastPoint = fastPoint.next.next;if (slowPoint.equals(fastPoint)){return true;}}return false;}
}

测试:

//链表节点类
public class ListNode {int val;ListNode next;public ListNode() {}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}@Overridepublic String toString() {return "ListNode{" +"val=" + val +", next=" + next +'}';}
}
public class P141 {public static void main(String[] args) {ListNode tailNode = new ListNode(1, null);ListNode node4 = new ListNode(2, tailNode);ListNode node3 = new ListNode(2, node4);ListNode node2 = new ListNode(1, node3);ListNode node1 = new ListNode(0, node2);ListNode head = new ListNode(9, node1);tailNode.setNext(head);System.out.println(checkCycle(head));}
}

在这里插入图片描述

3、leetcode881:救生艇

在这里插入图片描述
其实本质是两个人的体重之和问题,和上面提到的对撞指针很像,不过一个是等号,一个是小于号,因此考虑先给所有人的体重从小到大排个序(因为排序是对撞指针移动的基础前提)

public class P881 {public static int calcMinShipNum (int[] weight, int limit) {if (weight == null || weight.length == 0 || limit <= 0) {return 0;}Arrays.sort(weight);// 头尾指针的位置int i = 0;int j = weight.length - 1;// 船的数量int res = 0;while (i <= j) {if (weight[i] + weight[j] < limit) {// 两个人可以乘一条船走,船的数量+1,头指针向右一位,尾指针向左一位i = i + 1;j = j - 1;} else {// 两个人体重总和超重,只让最胖的人走j = j - 1;}// 不管这轮是载走了首位两个人,还是只能带走最胖的那个人,船的数量都+1res = res + 1;}return res;}
}

测试:


public class P881 {public static void main(String[] args) {int[] weightArray = {3,5,3,4};System.out.println(calcMinShipNum(weightArray, 5));}
}

在这里插入图片描述

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

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

相关文章

小程序-<web-view>嵌套H5页面支付功能

背景&#xff1a;小程序未发布前&#xff0c;公司使用vue框架搭建了管理系统&#xff0c;为了减少开发成本&#xff0c;微信提供了web-view来帮助已有系统能在小程序上发布&#xff0c;详见web-view | 微信开放文档。因公司一直未打通嵌套H5小程序的支付功能&#xff0c;导致用…

3D模型如何在力控组态中打开?---模大狮模型网

在展览3D模型设计行业中&#xff0c;力控组态是一个关键的技术应用。通过适当的力控组态&#xff0c;可以实现模型的互动性和真实感&#xff0c;提升展览效果和用户体验。本文将探讨如何在力控组态中打开和应用3D模型&#xff0c;从而达到更加生动和引人入胜的展示效果。 一、了…

WPF/C#:BusinessLayerValidation

BusinessLayerValidation介绍 BusinessLayerValidation&#xff0c;即业务层验证&#xff0c;是指在软件应用程序的业务逻辑层&#xff08;Business Layer&#xff09;中执行的验证过程。业务逻辑层是应用程序架构中的一个关键部分&#xff0c;负责处理与业务规则和逻辑相关的…

MySql Innodb 索引有哪些与详解

概述 对于MYSQL的INNODB存储引擎的索引&#xff0c;大家是不陌生的&#xff0c;都能想到是 B树结构&#xff0c;可以加速SQL查询。但对于B树索引&#xff0c;它到底“长”得什么样子&#xff0c;它具体如何由一个个字节构成的&#xff0c;这些的基础知识鲜有人深究。本篇文章从…

俄罗斯ozon运费计算工具,跨境电商ozon物流运费计算工具

OZON平台服装类目卖家而言&#xff0c;如何快速、准确地为产品定价&#xff0c;并有效管理运费成本&#xff0c;直接关系到市场竞争力与利润空间。接下来我们看看俄罗斯ozon运费计算工具&#xff0c;跨境电商ozon物流运费计算工具。 萌啦Ozon定价工具&#xff1a;智能模拟&…

你想活出怎样的人生?

hi~好久不见&#xff0c;距离上次发文隔了有段时间了&#xff0c;这段时间&#xff0c;我是裸辞去感受了一下前端市场的水深火热&#xff0c;那么这次咱们不聊技术&#xff0c;就说一说最近这段时间的经历和一些感触吧。 先说一下自己的个人情况&#xff0c;目前做前端四年&am…

day62--若依框架(基础应用篇)

若依搭建 若依版本 官方 若依官方针对不同开发需求提供了多个版本的框架&#xff0c;每个版本都有其独特的特点和适用场景&#xff1a; 前后端混合版本&#xff1a;RuoYi结合了SpringBoot和Bootstrap的前端开发框架&#xff0c;适合快速构建传统的Web应用程序&#xff0c;其…

Unity Shader 软粒子

Unity Shader 软粒子 前言项目Shader连连看项目渲染管线设置 鸣谢 前言 当场景有点单调的时候&#xff0c;就需要一些粒子点缀&#xff0c;此时软粒子就可以发挥作用了。 使用软粒子与未使用软粒子对比图 项目 Shader连连看 这里插播一点&#xff0c;可以用Vertex Color与…

XML简介XML 使用教程XML的基本结构XML的使用场景

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

汽车IVI中控开发入门及进阶(三十三):i.MX linux开发之开发板

前言: 大部分物料/芯片,不管MCU 还是SoC,都会有原厂提供配套开发板,有这样一个使用原型,在遇到问题时或者进行开发时可以使用。 i.MX 8QuadXPlus MEK board: 1、要测试display显示器,可使用i.MX mini SAS将“LVDS1_CH0”端口连接到LVDS到HDMI适配器的cable。 2、要测试…

微服务部署上线过程总结

目录 一、找到适合自己的部署方式 二、开始部署&#xff0c;先安装需要的环境 2.1 梳理一下都需要安装什么软件 2.2 配置数据库环境 2.3 配置redis 2.4 配置nacos 2.5 配置rabbitmq 2.6 配置docker环境 三、环境配置好了&#xff0c;开始部署后端 3.1 梳理后端都…

仓库管理系统12--供应商设置

1、添加供应商窗体 2、布局控件UI <UserControl x:Class"West.StoreMgr.View.SupplierView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://…

使用python做飞机大战

代码地址: 点击跳转

【论文阅读】伸缩密度比估计:Telescoping Density-Ratio Estimation

文章目录 一、文章概览&#xff08;一&#xff09;问题提出&#xff08;二&#xff09;文章工作 二、判别比估计和密度鸿沟问题三、伸缩密度比估计&#xff08;一&#xff09;核心思想&#xff08;二&#xff09;路标创建&#xff08;三&#xff09;桥梁构建&#xff08;四&…

Linux 生产消费者模型

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux初窥门径⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; 前言 1. 生产消费者模型 1.1 什么是生产消…

每日一题——Python实现PAT乙级1005 继续(3n+1)猜想(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码逻辑概述 时间复杂度分析 空间复杂度分析 总结 我要更强 代码优化点…

Nginx详解-安装配置等

目录 一、引言 1.1 代理问题 1.2 负载均衡问题 1.3 资源优化 1.4 Nginx处理 二、Nginx概述 三、Nginx的安装 3.1 安装Nginx 3.2 Nginx的配置文件 四、Nginx的反向代理【重点】 4.1 正向代理和反向代理介绍 4.2 基于Nginx实现反向代理 4.3 关于Nginx的location路径…

Jetson系列机载电脑创建热点模式配置方法

Jetson nano为例—— 创建热点模式配置方法 1.1、新建一个 WiFi 在屏幕右上角找到网络图标&#xff0c;点击后选择“Edit Connections”选项&#xff0c;进入选择网络连接页面&#xff0c;然后点击左下角加号&#xff0c;新建一个连接&#xff0c;类型选择 WiFi 后点击 “cre…

如何选择适合自己的巴比达内网穿透方案

选择适合自己的巴比达内网穿透方案&#xff0c;需要考虑几个关键因素&#xff0c;包括您的具体需求、安全性要求、技术水平以及预算。以下是一些选择巴比达内网穿透方案的建议步骤&#xff1a; 1. 确定需求和用途 首先&#xff0c;需要明确您希望通过内网穿透实现的具体目标和…

【linux学习---1】点亮一个LED---驱动一个GPIO

文章目录 1、原理图找对应引脚2、IO复用3、IO配置4、GPIO配置5、GPIO时钟使能6、总结 1、原理图找对应引脚 从上图 可以看出&#xff0c; 蜂鸣器 接到了 BEEP 上&#xff0c; BEEP 就是 GPIO5_IO05 2、IO复用 查找IMX6UL参考手册 和 STM32一样&#xff0c;如果某个 IO 要作为…