LeetCode Python题解(一)----双指针法

news/2024/7/7 21:09:45

根据: github优秀创作者.

算法思想

1.双指针法
2.排序
3.贪心思想
4.二分查找
5.分冶
6.搜索
7.动态规划
8.数学

1. 双指针法:

双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。

1.1 有序数组的 Two Sum

题目描述:在有序数组中找出两个数,使它们的和为 target。

输入: numbers={2, 7, 11, 15}, target=9
输出: [1,2]

思路:使用双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。

  • 如果两个指针指向元素的和 sum == target,那么得到要求的结果;
  • 如果 sum > target,移动较大的元素,使 sum 变小一些;
  • 如果 sum < target,移动较小的元素,使 sum 变大一些。
class Solution:def twoSum(self,nums,target):i,j = 0,len(nums)-1while i<j:sum = nums[i]+nums[j]if sum < target:i += 1elif sum > target:j -= 1else:return [i+1,j+1]return None
1.2 两数平方和

题目描述:判断一个数是否为两个数的平方和。

输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5

思路:使用双指针,因为为两个数的平方和,一个指针指向较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。

  • 较小元素自定义为0,较大元素自定义为目标值的开平方
  • 如果两个指针指向元素的和 sum == target,那么得到要求的结果;
  • 如果 sum > target,减小较大元素的值,使 sum 变小一些;
  • 如果 sum < target,增大较小元素的值,使 sum 变大一些。
class Solution:def judgeSquareSum(self,target):i,j = 0,int(target**0.5)while i <= j:sum = i*i + j*jif sum < target:i += 1elif sum > target:j -= 1else:return Truereturn False
1.3 反转字符串中的元音字符

题目描述:编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

输入: "leetcode"
输出: "leotcede"

思路:使用双指针指向待反转的两个元音字符,一个指针从头向尾遍历,一个指针从尾到头遍历。

class Solution:def reverseVowels(self, s: str) -> str:vowel = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']i, j = 0, len(s) - 1s = list(s)while i < j:if s[i] in vowel and s[j] in vowel:s[i], s[j] = s[j], s[i]i, j = i + 1, j - 1elif s[i] not in vowel:i = i + 1elif s[j] not in vowel:j = j - 1return ''.join(s)
1.4 回文字符串

题目描述:可以删除一个字符,判断是否能构成回文字符串。

输入: "aba"
输出: True

思路:使用双指针指向字符串,一个指针从头向尾遍历,一个指针从尾到头遍历。

  • 如果双指针指着的两边的值不同的时候,选择跳过左边的或者右边的一个值,再去验证一遍
class Solution:def validPalindrome(self,strs):i,j = 0,len(strs)-1while i < j:if strs[i] != strs[j]:return self.isPalindrome(strs,i,j-1) | self.isPalindrome(strs,i+1,j)i += 1j -= 1return Truedef isPalindrome(self,strs,left,right):while left < right:if strs[left] != strs[right]:return Falseleft += 1right -= 1return True

本文内容根据github优秀创作者,仅仅是自己学习。


http://lihuaxi.xjx100.cn/news/242852.html

相关文章

推荐几款chrome上比较好用的书签收藏夹插件

今天有个人问我chrome浏览器器上有没有可以稍后阅读的插件啊&#xff1f;她其实想问的就是书签收藏夹插件&#xff0c;因为我们在互联网上一不小心就会看到很多感兴趣的内容&#xff0c;但是时间有限暂时无法阅读&#xff0c;以后保存下来有时间的时候再看。我相信这是很多人共…

0基础学怎么学习python

​ Python相对于其他编程语言来说是比较简单的&#xff0c;非常适合零基础的小白学习&#xff0c;想要进入到互联网行业&#xff0c;可以优先选择学习Python&#xff0c;那么下面小编就来为大家详细的介绍一下0基础学怎么学习python? ​  0基础学怎么学习python? 1、要读书…

Linux中的文件复制:cp和scp

在使用操作系统的使用过程中&#xff0c;常常需要复制文件到本地或者传输文件到其他电脑上&#xff0c;这时候用到两个命令cp和scp。cp命令用来复制文件或者目录。scp是secure copy的简写&#xff0c;用来在Linux下进行加密的远程传输文件或者目录。cp和scp是Linux中功能强大且…

bat批处理文件启动Eclipse和ivy本地仓库的配置

一、bat批处理文件启动Eclipse 所需文件&#xff1a; 1、eclipse 2、jre 3、startup-eclipse.bat 确保以上三个文件夹同级 startup-eclipse.bat: set dir%CD% cd %dir%\eclipse eclipse.exe -vm %dir%\jre\bin -vmargs -Xms512M -Xmx1024M -XX:PermSize128M -XX:MaxPermSize256…

LeetCode Python题解(二)----排序

根据&#xff1a; githhub优秀创作者. 算法思想 1.双指针法 2.排序 3.贪心思想 4.二分查找 5.分冶 6.搜索 7.动态规划 8.数学 快速排序 用于求解 Kth Element 问题&#xff0c;也就是第 K 个元素的问题。 可以使用快速排序的 partition() 进行实现。需要先打乱数组&#xff…

javascript的垃圾回收机制指的是什么

定义&#xff1a;指一块被分配的内存既不能使用&#xff0c;又不能回收&#xff0c;直到浏览器进程结束。 像 C 这样的编程语言&#xff0c;具有低级内存管理原语&#xff0c;如 malloc()和 free()。开发人员使用这些原语显式地对操作系统的内存进行分配和释放。 而 JavaScript…

c++中的基本知识点

1 class和struct的区别和联系 在c中&#xff0c;class和struct只有一点不同&#xff0c;它们是可以完全替代使用的。唯一的不同在于&#xff0c;class中的成员默认是private的&#xff0c;而struct中默认是public的。 2 指针和引用的不同 2.1 引用在编译后&#xff0c;本质上还…

【GOF】23中设计模式深析

2019独角兽企业重金招聘Python工程师标准>>> ###对象创建 原型模式、工厂模式、抽象工厂模式、生成器、单例模式###接口适配 适配器模式、桥接、外观模式、迭代器###行为扩展 访问者模式、装饰模式、责任链模式###算法封装 模板方法模式、策略模式、命令模式、###性…