首页 > 其他分享 >三数之和习题分析

三数之和习题分析

时间:2024-11-26 21:32:41浏览次数:8  
标签:分析 right nums ++ 三数 三元组 -- 习题 left

习题:(leetcode15)

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

注意:答案中不可以包含重复的三元组。

分析:

此题使用排序+双指针进行解答。

先使用sort将数组元素按从小到大的顺序排好,然后进行循环,设置left和right双指针,进行判断,当三数之和小于0,要进行left++;当三数之和大于0,要进行right--;三数之和等于0的话还要判断,要进行去重,当left与后一个left指向的元素相等left++,要是right与前一个right指向的元素相等right--。

代码分析:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> result;
        sort(nums.begin(), nums.end());
        // 找出a + b + c = 0
        // a = nums[i], b = nums[left], c = nums[right]
        for (int i = 0; i < nums.size(); i++) {
            // 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了
            if (nums[i] > 0) {
                return result;
            }
            // 错误去重a方法,将会漏掉-1,-1,2 这种情况
            /*
            if (nums[i] == nums[i + 1]) {
                continue;
            }
            */
            // 正确去重a方法
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            int left = i + 1;
            int right = nums.size() - 1;
            while (right > left) {
                // 去重复逻辑如果放在这里,0,0,0 的情况,可能直接导致 right<=left 了,从而漏掉了 0,0,0 这种三元组
                /*
                while (right > left && nums[right] == nums[right - 1]) right--;
                while (right > left && nums[left] == nums[left + 1]) left++;
                */
                if (nums[i] + nums[left] + nums[right] > 0) right--;
                else if (nums[i] + nums[left] + nums[right] < 0) left++;
                else {
                    result.push_back(vector<int>{nums[i], nums[left], nums[right]});
                    // 去重逻辑应该放在找到一个三元组之后,对b 和 c去重
                    while (right > left && nums[right] == nums[right - 1]) right--;
                    while (right > left && nums[left] == nums[left + 1]) left++;

                    // 找到答案时,双指针同时收缩
                    right--;
                    left++;
                }
            }

        }
        return result;
    }
};

标签:分析,right,nums,++,三数,三元组,--,习题,left
From: https://blog.csdn.net/m0_74313252/article/details/144010125

相关文章

  • 《Python 股票交易分析:开启智能投资新时代》(一)
    一、Python在股票交易分析中的重要性Python以其强大的数据分析库和简洁的语法,成为股票交易分析的热门工具。它能够处理大量数据、进行复杂的计算和可视化,为投资者提供更准确的决策依据。股票分析是金融领域中至关重要的任务,而Python作为一种强大的编程语言,在股票分析中发......
  • 高效数据集成:旺店通转金蝶云星空案例分析
    旺店通·企业奇门数据集成到金蝶云星空的技术案例分享在现代企业的运营过程中,数据的高效流转和精准对接是提升业务效率的重要环节。本文将重点介绍如何通过轻易云数据集成平台,将旺店通·企业奇门的数据无缝集成到金蝶云星空系统中,实现其他入库单的高效管理。本次集成方案命名为......
  • 网络药理学之薛定谔Schrödinge Maestro:2、基础使用(导入大分子蛋白、更改配体样式、相
    本人是win11,薛定谔版本是12.9。官网:https://www.schrodinger.com/本篇文章的示例大分子蛋白PDBID为4KNN,小分子配体的MOLID为MOL004004。打开软件,最原始的界面如下:我个人将其分为几个板块,由上到下由左到右分别是:常见软件导航栏,包括基础的导入导出文件,操作撤回等。......
  • 习题9.4
    1.代码实现点击查看代码importnumpyasnpfromscipy.statsimportf_onewaydata=[[173,172,173,174,176,178,177,179,176,172,173,174],[175,173,176,178,177,179,174,175,173,170,171,172],[177,175,176,174,174,175,174,......
  • Avalonia 中使用 CEF 在 Ubuntu 运行崩溃分析
    在Linux上使用Avalonia和CefGlue:崩溃分析介绍本文主要记录了在Avalonia中使用CefGlue(基于.NET的Chrome嵌入内核的封装库)时遇到的问题,目的是测试Avalonia的Chrome内核在Linux系统中的兼容性。然而在实际运行时,我们意外地遇到了运行崩溃的问题。环境测试环境......
  • Python分析数据挖掘过程
    数据挖掘作为现代科技的一项核心技术,已经深刻影响了各行各业。其目标是从大量数据中提取有用的信息和知识,为决策支持提供依据。在快速增长的数据量面前,如何高效地处理、分析并挖掘数据,成为许多企业和科研人员必须面对的问题。掌握数据挖掘的概念与过程,不仅是学习编程的进阶......
  • Python分析时间序列特征
    时间序列分析是数据科学和统计学中的重要分支,广泛应用于金融市场预测、气象数据分析、经济趋势分析等领域。时间序列的数据特点独特,不同于普通的数据类型。它是基于时间顺序的一系列数据点的集合,通过对数据点的变化模式进行分析,能帮助人们发现潜在的趋势、周期和规律。在学......
  • 算法网关视频分析网关拍照检测高空抛物检测算法:守护城市安全的“天眼”
    高空抛物,一个看似微不足道的行为,实则隐藏着巨大的安全隐患。随着城市化进程的加快,高层建筑如雨后春笋般拔地而起,高空抛物现象也随之增多,给人们的生活带来了严重的威胁。从烟头、饮料瓶到花盆、垃圾,这些被随意抛掷的物品,一旦从高空落下,其破坏力不容小觑。为了有效预防和减少高空抛......
  • AI智能分析视频分析网关摄像机实时接入分析平台人脸识别有哪些技术要求?
    在现代社会,随着安全意识的提高和技术的发展,人脸识别技术已成为安防领域的关键技术之一。它不仅在提高安全性、优化管理流程方面发挥着重要作用,还在确保公共安全、加强个人隐私保护等方面扮演着越来越重要的角色。本文将详细介绍人脸识别技术在安防领域的技术要求、应用系统的标准......
  • 明火识别视频分析服务器烟雾识别小区住宅智慧消防场景方案
    随着城市化进程的加快和科技的不断进步,燃气安全和消防安全已成为城市安全管理的重要组成部分。为了响应国家政策的号召,提升城镇燃气安全水平,以及加强高层民用建筑的消防安全管理,迫切需要一套科学、高效的技术解决方案来应对当前的挑战。本文将详细介绍如何利用明火识别视频分析服......