11. 盛最多水的容器

给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。
【示例1】输入:[1,8,6,2,5,4,8,3,7] 输出:49
解释:图中垂直线代表输入数组[1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
【示例2】输入:height = [1,1] 输出:1
【示例3】输入:height = [4,3,2,1,4] 输出:16
【示例4】输入:height = [1,2,1] 输出:2
提示:

  • n = height.length
  • 2 <= n <= 3 * 104
  • 0 <= height[i] <= 3 * 104

尝试思路:
遍历两个垂线之间的体积,同时记录当前出现的最大体积

代码:

class Solution:def maxArea(self, height: List[int]) -> int:v_max, v = 0, 0l = len(height)for i in range(l):for j in range(i+1,l):v = min(height[i],height[j]) * (j-i)v_max = max(v, v_max)return v_max

错误:运行超时
原因:遍历复杂度过高,耗费时间太长

暂时没想到别的方法

14. 最长公共前缀

题目要求

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
【示例 1】输入:strs = [“flower”,“flow”,“flight”] 输出:“fl”
【示例 2】输入:strs = [“dog”,“racecar”,“car”] 输出:""
解释:输入不存在公共前缀。
提示:

  • 0 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

尝试思路1:
1、找到长度最短的元素,将其字符作为对比字符(得到列表中所有元素的长度列表,使用list.index(min)函数得到其索引,对应找到长度最短元素)
2、依次对比每个元素的每一位字符(以长度最短元素的字符作为对比字符)
2.1 如果与对比字符不同,则结束循环
2.2 如果均与对比字符相同,则计入公共序列
3、输出结果

测试中出现的未考虑到的案例:原始元素列表为空列表[]

代码:

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:ps = "" #最长公共前缀if strs:list_l = [len(i) for i in strs] #记录列表元素长度s = strs[list_l.index(min(list_l))] #字符最少元素for i in range(len(s)):same = 0 #相同标识符,=0表示有不相同字符,=1表示相同for j in range(len(strs)):if strs[j][i] == s[i]:same = 1else:same = 0breakif same == 1:ps = ps + s[i]else:breakreturn ps


尝试思路2:
1、找到元素中最短元素的长度(步骤同上)
2、依次取每个元素的第i位组成集合(不包含重复元素),若集合长度为1,则所有元素的第i位相同,否则结束循环
3、输出结果

代码:

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:ps = "" #最长公共前缀if strs:list_l = [len(i) for i in strs] #记录列表元素长度s = strs[list_l.index(min(list_l))] #字符最少元素for i in range(len(s)):set_c = set([strs[j][i] for j in range(len(strs))])if len(set_c) == 1:ps = ps + s[i]else:breakreturn ps


方法2耗时明显减少,但是内存一直不低

15. 三数之和

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
【示例 1】输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]]
【示例 2】输入:nums = [] 输出:[]
【示例 3】输入:nums = [0] 输出:[]
提示:

  • 0 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

尝试思路1:
1、判断nums里的元素个数,小于3直接输出空列表,否则继续步骤2
2、对nums进行排序(使用sort方法,没有返回值,直接修改原列表),三层循环,判断是否已经在现有列表里存在,若已存在则不再存入
3、输出结果

代码:

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:result = []if len(nums) >= 3:nums.sort()for i in range(len(nums)):for j in range(i+1, len(nums)):for t in range(j+1, len(nums)):if (nums[i] + nums[j] + nums[t] == 0) and [nums[i], nums[j], nums[t]] not in result:result.append([nums[i], nums[j], nums[t]])return result


根据提交结果可知,在时间限制内,没有出错,但是复杂度还是很高,导致时间过长

尝试思路2:
1、判断nums里的元素个数,小于3直接输出空列表,否则继续步骤2
2、对nums进行排序,并使用pop方法在nums列表中依次取出两个数(a从原序列取,b从去a序列取,c从去ab序列取),然后计算需要的第三个数是什么,并判断是否在剩下列表中存在第三个数,若不存在则不计入,若存在判断是否已经有了该组合,若有了也不计入
3、输出结果

代码:

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:result = []a, b, c = 0, 0, 0if len(nums) >= 3:nums.sort()for i in range(len(nums)):anums = numsa = anums.pop(i)for j in range(len(anums)):bnums = anumsb = bnums.pop(j)c = 0 - a - br = [a, b, c]r.sort()if (c in bnums) and (r not in result):result.append(r) return result

错误:索引超过范围
原因:“假赋值”,当删除中间商的某个元素时,一条等式链上的列表都会更新

解决方法:用copy.deepcopy(list)代替原赋值,解决了该错误,但仍存在运行超时问题

同时,采取remove方法取代pop方法
代码:

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:result = []a, b, c = 0, 0, 0if len(nums) >= 3:nums.sort()anums = copy.deepcopy(nums)for a in anums:anums.remove(a)bnums = copy.deepcopy(anums)for b in bnums:bnums.remove(b)c = 0 - a - br = [a, b, c]r.sort()if (c in bnums) and (r not in result):result.append(r) return result

错误:少了一组答案
原因:没有理解for循环取值的原理,以为更新后会从头开始,实际上for循环按照索引进行取值,被循环列表更新后,仍是原来的索引,即原来索引为1的值在更新后索引变成了0,但for仍取新列表中索引为1的值,故而一些数据被跳过,导致答案缺失。所以应该一直用原序列做循环。

更改后代码:

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:result = []a, b, c = 0, 0, 0if len(nums) >= 3:nums.sort()anums = copy.deepcopy(nums)for a in nums:anums.remove(a)bnums = copy.deepcopy(anums)for b in anums:bnums.remove(b)c = 0 - a - br = [a, b, c]r.sort()if (c in bnums) and (r not in result):result.append(r) return result

但仍超时,悲剧

【DW组队学习—LeetCode】day03相关推荐

  1. 【组队学习】【31期】LeetCode 刷题

    LeetCode 刷题 航路开辟者:杨世超 领航员:刘军 航海士:杨世超.李彦鹏.叶志雄.赵子一 基本信息 开源内容:https://github.com/itcharge/LeetCode-Py 开 ...

  2. leetcode组队学习——查找(二)

    文章目录 1.两数之和 15. 三数之和 16. 最接近的三数之和 18. 四数之和 454. 四数相加 II 49. 字母异位词分组 447. 回旋镖的数量 149. 直线上最多的点数 1.两数之和 ...

  3. leetcode组队学习——动态规划

    文章目录 主要思想 模板步骤 例题 300. 最长上升子序列 674. 最长连续递增序列 5. 最长回文子串 516. 最长回文子序列 72. 编辑距离 198. 打家劫舍 213. 打家劫舍 II ...

  4. leetcode组队学习——查找(一)

    文章目录 方法:考虑的基本数据结构 例题 202. 快乐数 205. 同构字符串 242. 有效的字母异位词 290. 单词规律 349. 两个数组的交集 350. 两个数组的交集 II 451. 根 ...

  5. 【组队学习】一月微信图文索引

    一月微信图文索引 一.组队学习相关 周报: [新周报(049)]Datawhale组队学习 Datawhale组队学习周报(第048周) Datawhale组队学习周报(第047周) Datawhal ...

  6. 【组队学习】【34期】组队学习内容详情

    第34期 Datawhale 组队学习活动马上就要开始啦! 02月09日(星期三),宣发,2月组队学习计划!. 02月12日(星期六),进入学习群.开营仪式. 本次组队学习的内容为: 阿里云天池在线编 ...

  7. 【新周报(050)】Datawhale组队学习

    记录: 按照Datawhale第33期组队学习的规划,六门课程 <吃瓜教程--西瓜书+南瓜书>.<动手学数据分析>.<李宏毅机器学习(含深度学习)>.<数据可 ...

  8. Datawhale组队学习周报(第047周)

    本周报总结了从 2021年01月03日至2022年01月09日,Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. ...

  9. 【组队学习】【32期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:陈伟峰 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bo ...

最新文章

  1. Juniper SSH防护
  2. feachall php_timthumb.php详解
  3. 学习招投标相关知识-编写标书
  4. 多对多的属性对应表如何做按照类别的多属性匹配搜索
  5. 利用var_export 写缓存配置
  6. Go map[int64]int64 写入 redis 占用多少内存
  7. OpenCv2 学习笔记(1) Mat创建、复制、释放
  8. 从0到1使用Kubernetes系列(四):搭建第一个应用程序
  9. 疫情中的2021,云原生会走向哪里
  10. js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME) 转载...
  11. 两年ACM竞赛的所有算法总结
  12. Dropping Balls(小球下落)
  13. 赚钱只要找到方法,就如吸空气
  14. The mbstring extendsion is missing,Please check you PHP configuration
  15. Linux Kernel代码艺术——数组初始化
  16. mysql ping 长连接超时时间_mysql_ping与mysql长连接(部分摘录) | 学步园
  17. S2SH框架配置步骤
  18. 驾校一点通电脑版客户端 v7.1 最新PC版
  19. origin 去掉白边
  20. c# 使用谷歌身份验证GoogleAuthenticator的示例

热门文章

  1. 某一新闻事件舆情舆论监测工作怎么做的系统解决办法
  2. 织梦js广告不显示原因,dedecms后台不显示广告预览(最新2016年2月29日)
  3. sqlyog下载和安装
  4. 尼姆(Nim)博弈策略的完整数学证明
  5. 相册照片不小心删了怎么恢复?恢复秘诀
  6. 《聪明的投资者》笔记
  7. Python检查一组数据是否能构成和谐集
  8. elasticsearch_head 启动集群健康值未连接?
  9. 恒指期货投资投资者如何稳步获利
  10. javascript-字符串函数-指定位置字符-位置查找-字符串替换-字符串分割