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

泗洪网站设计公司自媒体发稿

泗洪网站设计公司,自媒体发稿,庆阳网红刘斌个人资料简介,wordpress初始化15、三数之和 # 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k , # 同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 # 注意:答案中不可以包含重复…
15、三数之和
# 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,
# 同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
# 注意:答案中不可以包含重复的三元组。
class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""hashtable = dict()lst=[]for i, num in enumerate(nums):if target - num in hashtable:lst.append(sorted([target-num, num,-target]))          hashtable[num] = ireturn lstdef threeSum(self, nums):"""寻找数组中所有和为0的不重复三元组。:param nums: 输入的整数数组:type nums: List[int]:return: 返回所有满足条件的三元组列表:rtype: List[List[int]]"""# 使用哈希表统计每个数字出现的次数hashtable = dict()for num in nums:if num in hashtable:hashtable[num] += 1else:hashtable[num] = 1lst = []# 检查是否存在三元组 [0, 0, 0]if 0 in hashtable and hashtable[0] >= 3:lst.append([0, 0, 0])# 获取哈希表中的所有键,并排序以优化后续处理hashtable_key = list(hashtable.keys())hashtable_key.sort()# 将数字分为负数和正数两部分nums_negative = []nums_positive = []for num in hashtable_key:if num < 0:nums_negative.append(num)elif num > 0:nums_positive.append(num)# 检查是否存在三元组 [0, -num, num]if 0 in hashtable and hashtable[0] >= 1:for num in nums_positive:if -num in nums_negative:lst.append(sorted([0, -num, num]))# 检查是否存在三元组 [num1, num2, num3],其中 num1 + num2 + num3 = 0# 处理正数部分:如果某个正数出现两次或以上,则将其加入临时列表if len(nums_positive) != 0:lst_temp_positive = []for key in nums_positive:if hashtable[key] >= 2:lst_temp_positive.append(key)nums_positive += lst_temp_positive# 处理负数部分:如果某个负数出现两次或以上,则将其加入临时列表if len(nums_negative) != 0:lst_temp_negative = []for key in nums_negative:if hashtable[key] >= 2:lst_temp_negative.append(key)nums_negative += lst_temp_negative# 遍历负数列表,调用 twoSum 方法寻找与当前负数相加为零的正数对for num in nums_negative:lst_temp = self.twoSum(nums_positive, -num)lst += lst_temp# 遍历正数列表,调用 twoSum 方法寻找与当前正数相加为零的负数对for num in nums_positive:lst_temp = self.twoSum(nums_negative, -num)lst += lst_temp# 去重:将结果列表中的三元组转换为集合后再转回列表lst = list(map(list, set(map(tuple, lst))))return lst
Yes
No
开始
构建哈希表
是否有至少三个0?
添加 0, 0, 0
分类负数和正数
处理 0, -num, num
处理重复数字
遍历负数调用 twoSum
遍历正数调用 twoSum
去重结果
返回结果

问题分析与优化建议

1. 潜在问题
  • 异常处理不足:代码中没有对输入参数 nums 进行类型检查,如果传入的不是列表或包含非整数元素,可能会引发运行时错误。
  • 边界条件未充分考虑:当输入数组为空或长度小于3时,代码虽然不会报错,但可以更明确地处理这种情况。
  • 去重逻辑效率较低:当前使用 set(map(tuple, lst)) 去重的方式虽然有效,但会增加额外的时间和空间开销。
2. 优化方向
  • 输入验证:在函数开头添加对输入参数的类型和内容检查,确保输入为整数列表。
  • 边界条件优化:明确处理输入数组为空或长度小于3的情况。
  • twoSum 方法实现:提供一个高效的实现,避免重复计算。
  • 去重逻辑优化:通过排序和跳过重复值的方式减少不必要的计算,同时避免使用集合去重。
class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""seen = set()  # 用于存储已经访问过的数字pairs = []for num in nums:complement = target - num  # 计算当前数字的补数if complement in seen:  # 检查补数是否已经在集合中pairs.append(sorted([complement, num]))  # 如果存在,添加到结果中seen.add(num)  # 将当前数字添加到集合中return pairsdef threeSum(self, nums):"""寻找数组中所有和为0的不重复三元组。:param nums: 输入的整数数组:type nums: List[int]:return: 返回所有满足条件的三元组列表:rtype: List[List[int]]"""# 输入验证if not isinstance(nums, list) or not all(isinstance(x, int) for x in nums):raise ValueError("输入必须是整数列表")# 边界条件处理if len(nums) < 3:return []# 对数组进行排序nums.sort()result = []# 遍历数组,寻找三元组for i in range(len(nums) - 2):# 跳过重复元素if i > 0 and nums[i] == nums[i - 1]:continue# 使用双指针寻找两数之和left, right = i + 1, len(nums) - 1while left < right:total = nums[i] + nums[left] + nums[right]if total == 0:result.append([nums[i], 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 -= 1elif total < 0:left += 1else:right -= 1return result

优化点总结

  1. twoSum 方法优化:使用双指针方法替代哈希表方法,确保正确处理重复元素。
  2. 去重逻辑优化:通过排序和跳过重复值的方式减少不必要的计算,避免使用集合去重。
  3. 边界条件处理:确保代码在处理边界条件时逻辑正确。
http://www.dtcms.com/wzjs/215929.html

相关文章:

  • wordpress建站过程怎么自己做网站
  • 辽宁沈阳做网站域名注册网站系统
  • 自己做的网站服务器在哪里如何自己建网站
  • 南阳网站建设口碑新东方考研班收费价格表
  • 消防做设计有什么网站免费做网站网站
  • 深圳福田搬家公司网站如何优化
  • python做网站的书郑州seo网络营销
  • 江苏住房和城乡建设网站微帮推广平台怎么加入
  • 灵台门户网站建设百度一下知道首页
  • 住房和城乡建设查询平台seo优化专家
  • 塑料机械怎么做网站汕头seo排名公司
  • 网站对品牌的作用seo网站内容优化有哪些
  • 南昌专业做网站公司哪家好如何自建网站
  • 做设计赚钱网站网络推广员
  • 在网站社保减员要怎么做青岛最新消息
  • 四川专门做招聘酒的网站信息流优化师简历怎么写
  • 网设网站推广及seo方案
  • 有了自己的网站怎样做后台大数据营销策略有哪些
  • 网络服务包括哪些36优化大师下载安装
  • 网站制作报价多少百度搜索结果
  • 潍坊网站制作熊掌号正规seo排名多少钱
  • 做网站仓库报表系统新手如何涨1000粉
  • wordpress站长地图长春模板建站代理
  • 建数据库的网站多少钱app推广渠道商
  • wordpress mac 写文章抖音seo排名系统哪个好用
  • thinkphp企业网站模板下载河北百度seo关键词
  • 手机网站怎么设计如何快速被百度收录
  • 中铁建设工程项目公示网站想做百度推广找谁
  • 有什么好的网站可以接单子做竞价排名
  • 太原网站推广seo网站外链平台