栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode1-三数之和

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode1-三数之和

“删除有序数组中的重复项”和“三数之和”都可以借助预排序+双指针的方法来解决。首先进行排序,然后通过左右指针逐步筛选满足条件的数组值。
双指针

前提:数组有序性。
含义:在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(左右指针)的指针进行扫描,从而达到相应的目的。
三数之和这里使用的是左右指针,因此此处先介绍左右指针。左右指针在数组中实际是指两个索引值,一般初始化为 left = 0, right = len(nums) - 1
(三数之和含三个数,以i为起点,left=i+1,right=len(nums)-1)
伪代码

伪代码大致如下:

function fn (list) {
  var left = 0;
  var right = list.length - 1;
left = 0
right = len(nums)-1
while left <= right:#遍历数组
    left++
    #一些条件判断和处理
    right--

双指针在数据结构中除了在两数之和、三数之和此类中应用,还有就是二分查找中应用也较多。

三数之和 题目

解答思路:
class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort() # 排序
        out = []
        i = 0
        while i < len(nums) - 2:   # i,j,k的位置[i, j,...,k],i后至少1个元素,所以 0:
                        k -= 1
                    else:
                        res.append([nums[i], nums[j], nums[k]])
                        j += 1     
                        k -= 1
                        while j < k and nums[j] == nums[j - 1]:
                            j += 1  # 避免nums中的数重复,res中有想同的结果
                        while j < k and nums[k] == nums[k + 1]:
                            k -= 1
            i += 1
        return out

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739091.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号