返回顶部
首页 > 资讯 > 移动开发 >IOS 算法 三数之和求解问题
  • 952
分享到

IOS 算法 三数之和求解问题

IOS三数之和 2022-05-30 10:05:30 952人浏览 八月长安
摘要

目录IOS 算法三数之和求解问题1、三数求和简单介绍2、代码iOS 算法三数之和求解问题 1、三数求和简单介绍 对于一个整数的数组, 是否存在a, b, c 使得 a + b + c

iOS 算法三数之和求解问题

1、三数求和简单介绍

对于一个整数的数组, 是否存在a, b, c 使得 a + b + c = 0, 返回a b c 数组,相同数组只返回一个,:

例如:

[-1, -2, 6, 5, 0, 1, 2, -1, -1] 返回 [[-1, 0, 1], [-2, 0, 2], [-1, -1, 2]]

关键点:

① 找到和为0的三个数

② 去除相同项, 比如: 上面的数组 其实 [-1, 0, 1], 有三组, 但是我们只要添加1组

千万不要用 for循环套一层for循环 处理这个问题, 有些认为两层for循环求解, 可以啊, 一层寻找A, 2层寻找B, 判断数组是否存在C = - (A + B), 思路正确, 但是这种时间复杂度很高O(n^2) 而且上手时候你会发现, 去重问题处理起来比较繁琐

方法思路是:

数组nums 先正序排列

然后for循环, 设置最小值下标 low = i + 1, 最大值下标 high = nums.count - 1

最大值, 最小值 不断收缩查找, 重复的去掉 且始终保持 low < high (因为是正序排列 大值 >= 小值)

使得 0 - nums[i] = nums[low] + nums[high] (即: 0 = nums[low] + nums[high] + nums[i])

创建新数组 添加符合条件的 [nums[low], nums[high], nums[i]], 循环结束返回即可

接下来我们看下代码

2、代码


let num:[Int] = [0, 0, 0, 0, -1, 0, 1, 9, 7, 4]
print("返回结果: \(self.caculate(nums: num))")
   
    func caculate(nums: [Int]) -> [[Int]]  {
        
        //数组元素小于2直接返回
        if nums.count < 2 {
            return []
        }
        //创建空数组, 用来添加 [A,B,C]
        var result:[[Int]] = []
        //将原数组数组正序排列, 这一步很重要, 乱序数组很难处理
        let sort:[Int] = nums.sorted()
        
        //循环正序数组
        for i in 0..<sort.count-1 {
            
            //创建最小值下标, 最大值下标
            var low:Int = i+1
            var high:Int = sort.count - 1
            //A+B+C=0 定义-C 为了之后让 A+B=-C
            
            let target:Int = 0 - sort[i]
            
            //如果两个数相等直接跳过下一次循环
            if i>0 && sort[i] == sort[i-1] {
                continue
            }
            
            //始终保证 最大值下标 > 最小值下标
            //思路就是最大值不减小, 最小值不断增大, 最小值不会超过最大值
            //直到找到对应值, 相同值去重

 
            while low < high {
                //创建sum为: 两数字和 A+B
                let sum:Int = sort[low] + sort[high]
                
                //如果A+B == -C 即 A+B+C == 0
                if sum == target {
                    //数组添加新元素
                    result.append([sort[low], sort[high], sort[i]])
                    //如果当前最小值和下一位相等, 下标往前移位, 去重
                    while low < high && sort[low] == sort[low + 1] {
                        low += 1
                    }
                    //如果当前最大值和前一位相等, 下标往前移位, 去重
                    while low < high && sort[high] == sort[high - 1] {
                        high -= 1
                    }
                    //最小值向后移动一位, 最大值向前移动一位 继续收缩, 直到跳出while
                    low += 1
                    high -= 1
                    
                }else if sum < target{
                    //如果A+B == -C 即 A+B+C == 0
                    low += 1
                }else {
                    //如果A+B == -C 即 A+B+C == 0
                    high -= 1
                }
            }
        }
        
        return result
        
    }

返回结果: [[0, 1, -1], [0, 0, 0]]

到此这篇关于ioS 算法之三数之和求解问题的文章就介绍到这了,更多相关IOS 算法三数之和求解内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: IOS 算法 三数之和求解问题

本文链接: https://lsjlt.com/news/30519.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • IOS 算法 三数之和求解问题
    目录IOS 算法三数之和求解问题1、三数求和简单介绍2、代码IOS 算法三数之和求解问题 1、三数求和简单介绍 对于一个整数的数组, 是否存在a, b, c 使得 a + b + c...
    99+
    2022-05-30
    IOS 三数之和
  • PHP怎么求解三数之和问题
    本篇内容主要讲解“PHP怎么求解三数之和问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP怎么求解三数之和问题”吧!给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b...
    99+
    2023-06-20
  • java算法题解Leetcode15三数之和实例
    目录题目解题思路题目 15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所...
    99+
    2023-01-05
    java算法三数之和 java Leetcode
  • C语言算法练习之求二维数组最值问题
    目录一、问题描述二、算法实例编译环境三、算法实例实现过程3.1、包含头文件3.2、定义宏和声明数组3.3、声明相关变量3.4、输入数组(方阵)的阶3.5、输出 “输入的数...
    99+
    2024-04-02
  • 算法15. 三数之和_(c语言版)
    1. 题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums...
    99+
    2023-06-03
  • 剑指Offer之Java算法习题精讲求和篇
    题目一   解法 class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) {...
    99+
    2024-04-02
  • 求解三维装箱问题的启发式深度优先搜索算法(python)
    ⭐️ 问题描述 给定一个容器(其体积为 V V V) 和一系列待装载的箱子,容器和箱子的形状都是长方体。问题的目标是要确定一个可行的箱子放置方案使得在满...
    99+
    2023-09-07
    深度优先 python 算法
  • C#实现分治算法求解股票问题
    目录分治策略是:可使用分治法求解的一些经典问题分治算法 - 最大子数组问题 (1)暴力求解(2)分治法分治法实现大数相乘 C#实现分治策略是: 对于一个规模为n的问题,若该...
    99+
    2024-04-02
  • 如何使用C#算法解决求第n个数值问题
    这篇文章主要为大家展示了“如何使用C#算法解决求第n个数值问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用C#算法解决求第n个数值问题”这篇文章吧。已知数列:1,1,2,3,5,8,1...
    99+
    2023-06-18
  • Python算法题----1到100求和
    # 递推法def sum01(n):    result = 0    for i in range(1, n+1):        result += i    return result# 递归法def sum02(n):    if ...
    99+
    2023-01-31
    算法 Python
  • Matlab利用遗传算法GA求解非连续函数问题详解
    目录遗传算法基本思想遗传算法的主要步骤遗传编码二进制编码实数编码遗传算法流程实际演示 遗传算法基本思想 遗传算法(Genetic Algorithm, GA)起源于对生物系...
    99+
    2024-04-02
  • PHP怎么用回溯算法求解子集问题
    本篇内容介绍了“PHP怎么用回溯算法求解子集问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!回溯算法实际上一个类似枚举的搜索尝试过程,主要...
    99+
    2023-06-20
  • 详解Dijkstra算法之最短路径问题
    目录一、最短路径问题介绍二、Dijkstra算法介绍2.1、算法特点2.2、算法的思路三、Dijkstra算法示例演示四、Dijkstra算法的代码实现(c++)一、最短路径问题介绍...
    99+
    2024-04-02
  • 使用python求解迷宫问题的三种实现方法
    目录前言递归求解回溯求解队列求解总结前言 在迷宫问题中,给定入口和出口,要求找到路径。本文将讨论三种求解方法,递归求解、回溯求解和队列求解。 在介绍具体算法之前,先考虑将迷宫数字化。...
    99+
    2024-04-02
  • Java利用遗传算法求解最短路径问题
    目录1、问题描述2、编码3、个体类4、遗传算法解决最短路径问题主方法5、适应度6、选择算子7、交叉算子8、变异算子9、总结遗传算法(Genetic Algorithm,GA)最早是由...
    99+
    2024-04-02
  • A*算法求解八数码难题(python实现)
    目录 文章目录 前言 一、八数码难题是什么? 二、算法详解 1.启发函数(曼哈顿距离) 2.状态移动处理 3. A*搜索并返回路径  三、完整代码(注释很详尽) 总结 前言         本文用python实现A*...
    99+
    2023-10-27
    python 算法 人工智能
  • C#算法之两数之和
    题目 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每...
    99+
    2024-04-02
  • C/C++经典算法之约瑟夫问题详解
    目录什么是约瑟夫问题? 方法一:数组方法二:环形链表方法三:递归总结什么是约瑟夫问题?  约瑟夫问题:n个人围成一圈,初始编号从1~n排列,从约定编号为x的人开始...
    99+
    2024-04-02
  • 用 Python 解决 LeetCode 编程算法问题:函数的神奇之处!
    编程算法问题一直是程序员们的头疼之一。LeetCode 是一个专门为程序员提供算法题目的平台,其中包含了许多经典的编程问题。解决这些问题需要程序员们具备良好的编程技巧和算法思维能力。在这篇文章中,我们将介绍如何用 Python 解决 Le...
    99+
    2023-06-27
    leetcode 函数 编程算法
  • Vue之Axios的异步请求问题详解
    目录遇到的问题总结遇到的问题 在目前一个需求中,我需要等待axios请求完成后,判断请求是否出现异常,然后来判断是否关闭弹窗 修改后大概代码如下: async submitForm(...
    99+
    2023-02-10
    Vue Axios异步请求 Vue异步请求
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作