当前位置: 首页 > wzjs >正文

网站自建设需要买什么时候开始成都网站设计制作公司

网站自建设需要买什么时候开始,成都网站设计制作公司,广东品牌网站建设多少钱,wordpress 内容LeetCode 热题100 | 15. 三数之和 大家好,今天我们来解决一道经典的算法题——三数之和。这道题在 LeetCode 上被标记为中等难度,要求我们从一个整数数组中找到所有不重复的三元组,使得三元组的和为 0。下面我将详细讲解解题思路&#xff0c…

LeetCode 热题100 | 15. 三数之和

大家好,今天我们来解决一道经典的算法题——三数之和。这道题在 LeetCode 上被标记为中等难度,要求我们从一个整数数组中找到所有不重复的三元组,使得三元组的和为 0。下面我将详细讲解解题思路,并附上 Python 代码实现。


题目描述

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

示例:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]

解题思路

这道题的核心是找到所有满足条件的三元组,同时避免重复。我们可以通过排序数组和双指针法来高效地解决这个问题。

核心思想
  1. 排序数组

    • 将数组排序,方便后续使用双指针法。
  2. 遍历数组

    • 固定一个数 nums[i],然后在剩下的数组中使用双指针法寻找两个数 nums[left]nums[right],使得 nums[i] + nums[left] + nums[right] == 0
  3. 双指针法

    • 初始化 left = i + 1right = len(nums) - 1
    • 如果 nums[i] + nums[left] + nums[right] < 0,则 left 右移。
    • 如果 nums[i] + nums[left] + nums[right] > 0,则 right 左移。
    • 如果 nums[i] + nums[left] + nums[right] == 0,则找到一个三元组,记录下来,并跳过重复的元素。
  4. 去重

    • 在遍历过程中,跳过重复的 nums[i]nums[left]nums[right],避免重复的三元组。

代码实现

def threeSum(nums):""":type nums: List[int]:rtype: List[List[int]]"""nums.sort()  # 排序数组result = []  # 存储结果for i in range(len(nums) - 2):  # 遍历数组,固定 nums[i]if i > 0 and nums[i] == nums[i - 1]:  # 跳过重复的 nums[i]continueleft, right = i + 1, len(nums) - 1  # 初始化双指针while left < right:total = nums[i] + nums[left] + nums[right]  # 计算三数之和if total < 0:left += 1  # 和小于 0,左指针右移elif total > 0:right -= 1  # 和大于 0,右指针左移else:result.append([nums[i], nums[left], nums[right]])  # 找到一个三元组# 跳过重复的 nums[left] 和 nums[right]while left < right and nums[left] == nums[left + 1]:left += 1while left < right and nums[right] == nums[right - 1]:right -= 1left += 1right -= 1return result

代码解析

  1. 排序数组

    • 将数组排序,方便后续使用双指针法。
  2. 遍历数组

    • 固定一个数 nums[i],然后在剩下的数组中使用双指针法寻找两个数 nums[left]nums[right]
  3. 双指针法

    • 初始化 left = i + 1right = len(nums) - 1
    • 根据三数之和的大小,移动 leftright 指针。
  4. 去重

    • 在遍历过程中,跳过重复的 nums[i]nums[left]nums[right],避免重复的三元组。

复杂度分析

  • 时间复杂度:O(n²),其中 n 是数组的长度。排序的时间复杂度为 O(n log n),双指针法的时间复杂度为 O(n²)。
  • 空间复杂度:O(1),只使用了常数个额外空间。

示例运行

示例 1
# 输入:nums = [-1,0,1,2,-1,-4]
nums = [-1, 0, 1, 2, -1, -4]
print(threeSum(nums))  # 输出: [[-1, -1, 2], [-1, 0, 1]]
示例 2
# 输入:nums = [0,1,1]
nums = [0, 1, 1]
print(threeSum(nums))  # 输出: []
示例 3
# 输入:nums = [0,0,0]
nums = [0, 0, 0]
print(threeSum(nums))  # 输出: [[0, 0, 0]]

总结

通过排序数组和双指针法,我们可以高效地找到所有满足条件的三元组,并避免重复。这种方法的时间复杂度为 O(n²),能够处理较大的输入规模。希望这篇题解对你有帮助!如果还有其他问题,欢迎继续提问!

关注我,获取更多算法题解和编程技巧!

http://www.dtcms.com/wzjs/547751.html

相关文章:

  • 网站定制开发报价单WordPress需要什么配置
  • 淘宝网站是怎么做的吗宿迁住房和城乡建设部网站
  • 做淘宝还有必要做网站吗西西美人美体
  • 网站收录免费咨询网站源码授权
  • 网站免费模板制作无锡市政建设集团网站
  • 网站改版的形式大致有nginx wordpress 目录 伪静态
  • 学做预算网站网站没有问题但是一直做不上首页
  • 网站开发 站长统计3g手机网站源码
  • 淮安市哪里有做网站wordpress 微信主题下载
  • 布吉商城网站建设基本流程wordpress 谷歌竞价
  • 登录网站定制哪些人是建网站的
  • jsp网站建设模板下载龙岩有什么兼职可以做
  • 青岛黄岛区建设工程管理局网站企业网站的建设 摘要
  • 网站做sem推广时要注意什么恩施网站设计
  • 注册公司登陆哪个网站建站专业定制
  • 使用aspx做电影网站seo外包公司优化
  • 写作网站投稿平台做网站开专票税钱是多少个点
  • js素材网站三七游戏官网
  • 高端网站定制商京东 推广网站怎么做
  • 网站搭建大型公司微信开放平台如何注销
  • 建设领域信用系统网站网站怎么做移动图片不显示不出来
  • 怎么做中英文双语网站沧州软件开发公司
  • 南昌市公司网站建设不知名网站开发
  • 做网站的详细步骤企业关键词优化公司
  • 电子商务网站建设课外实训seo技术外包公司
  • 海报素材库网站免费为什么外包会把人干废
  • 潍坊企业建站系统蛋挞怎么做制作方法
  • 百度seo排名曝光行者seo哪些网站可以做seo
  • 婚庆公司网站建设策划书搜索关键词排名推广
  • 做个小型购物网站要多少钱昆明企业做网站