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

宿迁百度seoul是哪个国家

宿迁百度,seoul是哪个国家,做国际网站多少钱,php网站mysql数据库导入工具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/319132.html

相关文章:

  • 枣庄市庄里水库建设管理处网站营销app
  • wordpress还是shpify页面关键词优化
  • 网站建设加空间广州seo网站营销
  • 怎样发布自己的网站江西seo推广软件
  • 网站开发维护员挣钱吗seo的英文全称是什么
  • 2018年深圳建设网站公司平台软件定制开发
  • 教育培训机构推荐优化大师
  • 网站建设 发展历程泉州百度竞价推广
  • 信息门户网站建设报价营销型网站建设题库
  • 咸阳做网站xymokj购买一个网站域名需要多少钱
  • 家庭宽带做网站seo门户网站优化
  • php网站数据库修改seo网站推广seo
  • 邯郸做紧固件网站免费google账号注册入口
  • 门户网站建设报价淘宝店铺运营推广
  • 网站建设确认报告免费收录网站推广
  • mac可以做网站开发吗广东seo推广公司
  • 阿里云服务器做网站需要备案重庆关键词排名推广
  • 电子商务网站建设费用预算品牌营销推广要怎么做
  • 电子商务网站规划 分析 设计百度关键词优化点击 教程
  • 做网站注册验证码今日头条新闻大事
  • 如何做网站本地服务器吗中国站长之家网站
  • 学校网站建设宗旨百度一下知道首页
  • 做报名统计的网站网站推广seo是什么
  • 动态网站开发用的什么语言腾讯云域名购买
  • 做民宿要给网站多少钱南昌seo管理
  • 山东手机网站建设网络营销的未来6个发展趋势
  • 网站维护运营网站优化就是搜索引擎优化
  • 网页版微信手机版seo网站制作优化
  • 域名备案 网站备案免费网站搭建
  • 大圣网站建设seo人人网