力扣-使用双指针的方法的题们(持续更新中。。。

发布于:2025-07-16 ⋅ 阅读:(13) ⋅ 点赞:(0)

目录

一.两数之和 

1.题目

2.灵神的视频题解

3.代码

二.移动零

1.题目 

2.B站博主的视频题解

3.代码

三.盛最多水的容器

1.题目

2.灵神的视频题解

3.代码


一.两数之和 

1.题目

167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)

2.灵神的视频题解

【两数之和 三数之和【基础算法精讲 01】-哔哩哔哩】 https://b23.tv/ukJ08aw

采用双指针方法的解题关键点【大于移动大指针,小于移动小指针】:指针初始化指向首尾,首尾指针之和>Target,(说明里面大的那个数和其他的数只会更大),所以移动大数的指针;同理首尾指针之和<Target,(说明里面小的那个数和其他的数只会更小),所以移动小数的指针。

3.代码

class Solution(object):
    def twoSum(self, numbers, target):
        """
        :type numbers: List[int]
        :type target: int
        :rtype: List[int]
        """
        left=0
        right=len(numbers)-1
        while left<right:
            if (numbers[left]+numbers[right])>target:right-=1
            elif (numbers[left]+numbers[right])<target:left+=1
            else:
                return [left+1,right+1]
        

二.移动零

1.题目 

283. 移动零 - 力扣(LeetCode)

2.B站博主的视频题解

【【力扣hot100】【LeetCode 283】移动零|双指针-哔哩哔哩】 https://b23.tv/O40RUfW

不同于正向思考将零移动到末尾,反向思考,将所以非零数交换移动到最后一个非零指针指向的位置,双指针,一个指针遍历数组,一个指针指向最后一个非零位置

3.代码

class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        last_zero=0
        for i in range(len(nums)):
            if nums[i]!=0:
                nums[last_zero],nums[i]=nums[i],nums[last_zero]
                last_zero+=1
        print(nums)

三.盛最多水的容器

1.题目

11. 盛最多水的容器 - 力扣(LeetCode)

2.灵神的视频题解

【盛最多水的容器 接雨水【基础算法精讲 02】-哔哩哔哩】 https://b23.tv/FORgr9h

思路:

思路:还是双指针,老思路,一个最左一个最有指针,开始分析:

1)假设固定左右指针,因为是短板问题,长版的指针如果往中间移动,水的高度不会变,宽度变小,容积一定变小,所以不能移动长的指针;但是把短的指针往中间移动,水的高度可能增加,虽然宽度变小,所以容积有可能增加。

2)所以我们保留历史最大容积 ,把左右开始往中间移动的双指针,每次把长度短的那个往中间移动。

3.代码

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        ans=0
        lenth=len(height)
        L=0
        R=lenth-1
        while L<R:
            area=(R - L) * min(height[L], height[R])
            if height[L]<height[R]:
                L+=1
            else:
                R-=1
            ans=max(ans,area)
        return ans

        
        


网站公告

今日签到

点亮在社区的每一天
去签到