根据: 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优秀创作者,仅仅是自己学习。

LeetCode Python题解(一)----双指针法相关推荐

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

    根据: githhub优秀创作者. 算法思想 1.双指针法 2.排序 3.贪心思想 4.二分查找 5.分冶 6.搜索 7.动态规划 8.数学 快速排序 用于求解 Kth Element 问题,也就是第 ...

  2. LeetCode 206. 反转链表 双指针法 辅助结点 递归

    题目链接 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶: ...

  3. python 双指针法_leetcode 11 题解:python3@ 官方题解_暴力法_双指针法

    leetcode leetcode解题得的源码,解题思路在代码的注释里. 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 ...

  4. 题解——两种算法解Leetcode题库第977题(暨双指针法小结)

    一.Leetcode题库第977题题目 977. 有序数组的平方 二.解法一--暴力解法 算法思路:for循环遍历数组,对数组元素做平方操作:调用sorted()函数对处理后的数组进行快速排序 算法时 ...

  5. 双指针法(leetcode分类解题,C++代码详细注释)

    双指针法 前言 167.两数之和 II - 输入有序数组 88.合并两个有序数组 142. 环形链表 II 633.平方数之和 680. 验证回文字符串 Ⅱ 27. 移除元素 344. 反转字符串 剑 ...

  6. 【LeetCode笔记】11.盛最多水的容器(Java、双指针法)

    文章目录 题目描述 代码 & 解题思路 题目描述 无 代码 & 解题思路 思路:使用左右两个指针,不断缩小范围,并在每次缩小的过程对最大值进行更新. 代码实现不难,主要是弄明白为啥这样 ...

  7. 字符串--Leetcode (python)

    单词拆分 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典 ...

  8. 【BZOJ4653】[Noi2016]区间 双指针法+线段树

    [BZOJ4653][Noi2016]区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含 ...

  9. 【BZOJ2500】幸福的道路 树形DP+RMQ+双指针法

    [BZOJ2500]幸福的道路 Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的 ...

最新文章

  1. php数组包含对象吗,在包含数组的PHP对象上调用方法
  2. maven 下载 源码和javadoc命令
  3. 认证篇——单向散列函数
  4. DM8168的McSPI/McASP/McBSP接口
  5. 50T内存?百万机时?头一次见这么耗费内存和机时的分析?
  6. Mybatis 一对多关联查询collection用法
  7. python实现人脸识别比对_人脸识别并比对实现(基于face_recognition)
  8. APPCAN学习笔记002---app快速开发AppCan.cn平台特色
  9. LINUX使用sed,字串中包含特殊字符怎么办?
  10. VS C# string 字符查找 寻找指定字符
  11. java 反序列化 怎么知道类_理解java中的序列化与反序列化
  12. java中cplex程序_Cplex中文教程全 PDF 下载
  13. dk 7 linux x64.rpm,linux x64 Java/JDK 11下载 jdk-11.0.7_linux-x64_bin.rpm官方镜像版
  14. 有了这款geek卸载工具,让你卸载不在烦恼!
  15. RAB, RB, SRB
  16. 马云开酒吧了,酒吧叫“平头哥”,真猛~
  17. 2022-07-25 第五小组 顾祥全 学习笔记 day18-JavaSE-接口
  18. 【javaScript】原生实现窗口拖动效果
  19. 计算机语言市场份额,21年7月编程语言排名:python上升迅速,others占比最高
  20. 100999凑整到万位进一_大数与凑整教学实录

热门文章

  1. ES5-Array-push(),pop(),shift(),unshift()
  2. hdu-3071 Gcd Lcm game---质因数分解+状态压缩+线段树
  3. 软件工程实践2017 个人技术博客
  4. SmartRoute之大规模消息转发集群实现
  5. 中国最齐全的主要电子商务网站(B2C)
  6. 优化eclipse启动速度
  7. linux tpm 测试完整记录,亲测有效。
  8. Windows Embedded Standard开发初体验(四)
  9. 【我的Android进阶之旅】推荐一款能提升数十倍效率的Android应用开发助手
  10. [翻译] DSL和模型驱动开发的最佳实践(3/4)