双指针解决数组问题(python)

1、快慢指针

快慢指针,常用于原地修改数组

删除有序数组中的重复项

def removeDup(nums):slow, fast = 0, 1while fast < len(nums):if nums[slow] != nums[fast]:slow += 1nums[slow] = nums[fast]fast += 1return slow+1# nums[:slow+1]

给定一个已排序的链表,删除所有重复的元素,返回删除后的链表

def removeDupList(head):if not head: return Nonep1, p2 = head, headwhile p2:if p1.val != p2.val:p1.next = p2p1 = p1.nextp2 = p2.nextp1.next = Nonereturn head

移除元素

原地移除所有数值等于val的元素,并返回移除后数组的新长度

def removeK(nums, k):if len(nums) == 0: return 0slow, false = 0, 0while fast < len(nums):if nums[fast] != val:nums[slow] = nums[fast]slow+=1fast += 1return slow

移动零

给定一个数组,将所有0移动到数组的末尾,同时保持非零元素的相对顺序。

def removeZero(nums):n = len(nums)slow, fast = 0, 0while fast < n:if nums[fast] != 0:nums[slow] = nums[fast]slow += 1fast += 1while slow < n:nums[slow] = 0slow += 1

2、左右指针

只要数组有序,就应该想到双指针技巧

二分查找

在有序列表中查找目标值所在位置

def binarySearch(nums, target):left = 0right = len(nums)-1while left <= right:mid = (right-left)//2if nums[mid]==terget:return midelif nums[mid] < target:left = mid+1else:right = mid-1return -1

两数之和

数组有序,从数组中找出满足相加之和等于目标值的两个数

def twoSum(nums, target):left, right = 0, len(nums)-1while left != right:s = nums[left]+nums[fast]if s == target:return [left+1, right+1]elif s > target:right -= 1else:left += 1return [-1, -1]

反转数组

# 方法一:切片的方式,字符串和数组都可以使用切片的方式反转
a = [1,2,3,4]
b = a[::-1]    # b=[4,3,2,1]
# 方法二:reverse(),只有列表有reverse()
a.reverse()   # a=[4,3,2,1]
# 方法三:左右指针
def reverseList(nums):left, right = 0, len(nums)-1while left < right:temp = nums[right]nums[right] = nums[left]nums[left] = templeft+=1right-=1

最长回文子串

找回文串的难点在于,回文串的长度可能是奇数,也可能是偶数。解决该问题的核心是从中心向两端扩散的双指针技巧。
如果回文串的长度为奇数,则有一个中心字符;如果回文串的长度为偶数,则可认为它有两个中心字符。

def palindrome(s, l, r):while l>=0 and r<len(s) and s[l] == s[r]:l-=1r+=1return s[l+1:r]
def longestPalindrome(s):res = ''for i in range(len(s)):s1 = palindrome(s, i, i)s2 = palindrome(s, i, i+1)res = res if res > len(s1) else s1res = res if res > len(s2) else s2return res

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

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

相关文章

redis的实际使用

Redis是一种内存数据库&#xff0c;常用于缓存、会话管理、消息队列等。在项目中合理使用Redis可以提高系统性能和可扩展性。以下是一些使用Redis的建议&#xff1a; 1. 缓存常用数据&#xff1a;将经常使用的数据缓存在Redis中&#xff0c;以减少数据库的读取次数&#xff0c…

Rockchip RK3399 - DRM crtc基础知识

一、LCD硬件原理 1.1 CRT介绍 CRT是阴极射线管(Cathode Ray Tube)的缩写,它是一种使用电子束在荧光屏上创建图像的显示设备。CRT显示器在过去很长一段时间内是主流的显示技术,现已被液晶显示屏或其他新兴技术所替代。 在CRT显示器中,扫描电子束从左到右、从上到下移动,照亮…

laravel 中 npm run 同时执行多个命令

在使用laravel 启动项目时 经常需要同时运行两个命令。 1.前端既是 npm run dev 2.后端php则是 php artisan serve 可以安装 使用 concurrently 进行并行启动 concurrently - npm npm install concurrently --save 之后修改 package.json 在 scripts 中增加 &#xff08;多条…

算法|每日一题|掷骰子等于目标和的方法数|动态规划

1155.掷骰子等于目标和的方法数 原题地址&#xff1a; 力扣每日一题&#xff1a;掷骰子等于目标和的方法数 这里有 n 个一样的骰子&#xff0c;每个骰子上都有 k 个面&#xff0c;分别标号为 1 到 k 。 给定三个整数 n , k 和 target &#xff0c;返回可能的方式(从总共 kn 种…

useLayoutEffect和useEffect的区别

使用方式 这两个函数的使用方式其实非常简单&#xff0c;他们都接受一个函数一个数组&#xff0c;只有在数组里面的值改变的情况下才会再次执行 effect。所以对于使用方式我就不过多介绍了&#xff0c;不清楚的可以先参考官网 。 差异 useEffect 是异步执行的&#xff0c;而…

一招解决“请在微信客户端中打开链接”

一招解决“请在微信客户端中打开链接”-遇见你与你分享 在浏览器访问网站&#xff0c;却提示“请在微信客户端打开链接”。虽然这个情况你可能从未遇到过&#xff0c;但对于爱折腾的小伙伴&#xff0c;确是一道拦路虎 其实解决办法很简单&#xff0c;就是新建一个UA&#xff1…

ubuntu vbox 5.2 资源 virtualbox-dkms

各种 linux 包 https://pkgs.org/search/?qpython3.6 配置 python 默认版本 查看已安装python $ u82:~/Py_demo$ ls /usr/bin/python* /usr/bin/python2 /usr/bin/python2.7 /usr/bin/python3 /usr/bin/python3.8设置默认版本 $ u82:~/Py_demo$ sudo update-alternatives…

产品使用说明书小程序开发制作方案

使用说明书小程序定位为一个用户友好、易于操作的指南工具。它旨在为用户提供清晰、简洁的设备使用说明&#xff0c;帮助他们更好地理解和使用各种智能设备。 一、使用说明书小程序可以在以下场景中使用&#xff1a; 购买新设备后&#xff0c;用户可以通过小程序快速了解设备的…

Ubuntu 22.04配置/etc/rc.local开机自启文件

1.查看系统版本 rootbogon-virtual-machine:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy rootbogon-virtual-machine:~ 2. 解决 /etc/rc.local 开机启动问题 看rc-loc…

BP神经网络

BP神经网络 B P BP BP神经网络1.激活函数常用的激活函数 2.神经网络结构符号约定 3.损失函数回归问题分类问题 4.反向传播求解梯度矩阵梯度下降法反向传播公式推导&#xff08;四个基础等式&#xff09;等式一 输出层误差等式二 隐藏层误差等式三 参数变化率等式四 参数更新 反…

linux重置root密码

重启Linux系统主机并出现引导界面时&#xff0c;按下键盘上的e键进入内核编辑界面 然后再lvrhel/swap 后面加上 rd.break 然后按下ctrlx组合键运行修改后的内核程序,大约30s过后&#xff0c;系统会进入紧急救援模式 然后依次输入以下命令&#xff1a; mount -o remount,rw …

UI 自动化测试框架:PO模式+数据驱动

1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 PO 模式的设计思想与…

进阶课4——随机森林

1.定义 随机森林是一种集成学习方法&#xff0c;它利用多棵树对样本进行训练并预测。 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器&#xff0c;每棵树都由随机选择的一部分特征进行训练和构建。通过多棵树的集成&#xff0c;可以增加模型的多样性和泛化能力。…

windows安装mysql-8.0.35

打开cmd(以管理员身份运行)&#xff0c;切换到mysql下的bin目录 mysqld --initialize 执行完毕之后&#xff0c;在data目录下会生成很多文件。 打开cmd(以管理员身份运行)&#xff0c;切换到mysql下的bin目录&#xff0c;如果刚才的cmd没有关闭&#xff0c;可以继续mysqld -…

C语言汇总

汇总一&#xff08;linux环境&#xff09; /bin &#xff1a;bin是二进制&#xff08;binary&#xff09;英文缩写。 /boot&#xff1a;存放的都是系统启动时要用到的程序。 /dev&#xff1a;包含了所有Linux系统中使用的外部设备。 /etc&#xff1a;存放了系统管理时要用到的…

【Android】MQTT

目录 MQTT 协议简介应用场景优点缺点 部署服务端下载安装包启动服务器 搭建客户端下载SDK添加依赖配置MQTT服务和权限建立连接订阅主题发布消息取消订阅断开连接 MQTT客户端工具最终效果实现传感器数据采集与监测功能思路 MQTT 协议 简介 MQTT&#xff08;Message Queuing Te…

Centos7卸载minio

如果是按照上一篇文章安装的minio 1.停止minio pkill minio2.删除相关配置文件(在/usr/local目录下执行) rm -rf minio 如果配置了开机自启 1.取消注册minio服务 chkconfig --del startMinio.sh2.禁用开机自启动 chkconfig startMinio.sh off3.删除启动脚本 rm /etc/rc…

Windows Server扩展卷变灰怎么办?

当Windows Server中的某一个分区&#xff0c;特别是系统&#xff08;C&#xff09;分区磁盘空间不足时&#xff0c;您可能需要使用内置磁盘管理工具的“扩展卷”功能扩展分区了。但不幸的是&#xff0c;当您尝试扩展C盘驱动器时&#xff0c;很有可能会出现Windows Server扩展卷…

Android底层摸索改BUG(一):Android系统状态栏显示不下Wifi图标

这是我入职的第一个BUG&#xff0c;头疼&#xff0c;隔壁实习生一周解决了&#xff0c;我多花了几天 其中最大的原因就是我思考复杂了&#xff0c;在公司系统上&#xff0c;此BUG标题为&#xff1a; 请确认Wifi优先级&#xff0c;状态栏Wifi被忽略 BUG意思就是&#xff1a;当…

云原生Docker Cgroups资源控制操作

目录 资源控制 cgroups四大功能 CPU 资源控制 设置CPU使用率上限 进行CPU压力测试 设置50%的比例分配CPU使用时间上限 设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09; 设置容器绑定指定的CPU 对内存使用的限制 限制容器可以使用的最大内存 限制可用的…