首页 > 其他分享 >力扣15题——蓝桥杯每日一练(双指针+排序)

力扣15题——蓝桥杯每日一练(双指针+排序)

时间:2024-12-02 19:00:57浏览次数:10  
标签:力扣 15 nums 重复 res 三元组 蓝桥 while return

#题目

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]]
满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。
请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

#思路

通过排序+双指针完成解题

#敲代码思维过程

     对排序后的列表循环遍历,每一次循环都锁定了一个值,首先对索引值进行判断(第一次检查重复值),设置随循环可变的索引,接下来进入双指针法,分三种情况讨论,首先如果三个和为0,顺势判断下一个是否重复(第二次检查重复值),跳过重复的,无误的话,其次大于0,小于0分别移动,得出结果

#代码

class Solution:
    def threeSum(self, nums: list[int]) -> list[list[int]]:
        n = len(nums)
        if (not nums or n < 3):
            return []
        nums.sort()
        res = []
        for i in range(n):
            if (nums[i] > 0):
                return res
            if (i > 0 and nums[i] == nums[i - 1]):
                continue
            L = i + 1
            R = n - 1
            while (L < R):
                if (nums[i] + nums[L] + nums[R] == 0):
                    res.append([nums[i], nums[L], nums[R]])
                    while (L < R and nums[L] == nums[L + 1]):
                        L = L + 1
                    while (L < R and nums[R] == nums[R - 1]):
                        R = R - 1
                    L = L + 1
                    R = R - 1
                elif (nums[i] + nums[L] + nums[R] > 0):
                    R = R - 1
                else:
                    L = L + 1
        return res


a = Solution()
print(a.threeSum([-6, 2, 3, 3, 3, 3, 4]))

#结果

[[-6, 2, 4], [-6, 3, 3]]

标签:力扣,15,nums,重复,res,三元组,蓝桥,while,return
From: https://blog.csdn.net/2201_75478206/article/details/144174906

相关文章

  • 力扣刷题TOP101:10.BM12 单链表的排序
    目录:目的思路复杂度记忆秘诀python代码目的{1,3,2,4,5}排序变成{1,2,3,4,5}思路这个任务是将无序单链表变成有序表。推荐使用归并算法。可以理解为汉武帝的推恩令政策(分治思想)。将大块封地分成小块封地(分割链表),对小封地进行整顿,确保符合中央标准(分到最小),将整治......
  • 力扣面试题 28 - 配对交换
    题目:配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。示例1:输入:num=2(或者0b10)输出1(或者0b01)示例2:输入:num=3输出:3提示:num的范围在[0,2^30-1]之间,不会发生整数溢出。思路:首先我们......
  • CMU_15445_P3_bustub_事务与锁管理机制
    CMU_15445_P3_bustub_事务与锁管理机制BUSTUB中定义了一个Query在执行的时候应该包括的基本的上下文信息,也就是类ExecutorContext.我们可以看到这个类的定义的属性为:classExecutorContext{private:/**Thetransactioncontextassociatedwiththisexecutorcon......
  • 单片机学习笔记 15. 串口通信(理论)
    更多单片机学习笔记:单片机学习笔记1.点亮一个LED灯单片机学习笔记2.LED灯闪烁单片机学习笔记3.LED灯流水灯单片机学习笔记4.蜂鸣器滴~滴~滴~单片机学习笔记5.数码管静态显示单片机学习笔记6.数码管动态显示单片机学习笔记7.独立键盘单片机学习笔记8.矩阵键盘按......
  • 洛谷P4387 【深基15.习9】验证栈序列(c嘎嘎)
    题目链接:P4387【深基15.习9】验证栈序列-洛谷|计算机科学教育新生态题目难度:普及/提高解题思路:首先这道题很明显是要用栈来解决的(题目都已经明示了),我们得利用好栈的后进先出的特点来模拟这道题,先读入入栈和出栈序列,然后将遍历入栈序列,边遍历边压入栈,然后与出栈序列比......
  • 【二分查找】力扣 275. H 指数 II
    一、题目二、思路h指数是高引用引用次数,而citations数组中存储的就是不同论文被引用的次数,并且是按照升序排列的。也就是说h指数将整个citations数组分成了两部分,左半部分是不够引用h次的论文,右半部分论文的引用次数都是大于等于h的。因此,可以采用二分查找的......
  • [2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(6))
    参考程序:#include<bits/stdc++.h>usingnamespacestd;intn;inta[305];intdp[305][305];//打掉ij之间所有靶子可以获得的最大积分(不含i,j)intmain(){cin>>n;for(inti=1;i<=n;i++){cin>>a[i];}a[0]=1;a[n+1]=1;for(inti=n......
  • python学习笔记(15)算法(8)双向队列
    在队列中,我们仅能删除头部元素或在尾部添加元素。双向队列(double‑endedqueue)提供了更高的灵活性,允许在头部和尾部执行元素的添加或删除操作。一、双向队列常用操作队首入队(push_front):在双向队列的头部添加一个元素。队首出队(pop_front):删除双向队列头部的元素。队尾入队(push......
  • L2-015 互评成绩
    目录一、问题描述二、问题分析 三、源码解答四、时空复杂度分析五、参考资料一、问题描述学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编......
  • 2024-2025-1 学号20241315《计算机基础与程序设计》第十周学习总结
    作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里<作业要求的链接>(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK10)这个作业的目标信息系统数据库与SQL人工智能与专家系统人工神经网络模拟与离散事件排队系统天气......