文章目录

  • 11. 盛最多水的容器
  • 15. 三数之和
  • 16. 最接近的三数之和
  • 18. 四数之和

前800题easy难度想做的已经做完了,之后是medium难度

11. 盛最多水的容器

给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

1.暴力法

class Solution {public int maxArea(int[] height) {if (height.length<2) {return 0;}int max = 0;for (int i =0;i<height.length-1;i++) {for (int j=i+1;j<height.length;j++) {int writer = (j-i)*Math.min(height[i],height[j]);max = Math.max(max,writer);}}return max;}
}

暴力法没做,贴个别人写的java,反正就是全遍历一遍取最大值。主要还是双指针法

2.双指针

class Solution:def maxArea(self, height: List[int]) -> int:left = 0right = len(height) -1max_value = 0while(left<right):max_value = max(max_value, (right-left)*min(height[left], height[right]))if height[left] < height[right]:left += 1else:right -= 1return max_value

具体原理写起来比较费事,贴一个我觉得讲的清楚的链接。leetcode链接,84ms,14.2MB

15. 三数之和

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

1.排序+双指针

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort()res = []length = len(nums)for i in range(length):if nums[i] > 0:return res#去重位置1if i>0 and nums[i] == nums[i-1]:continueleft = i+1right = length-1while(left<right):if nums[left] + nums[i] + nums[right] == 0:res.append([nums[left], nums[i], nums[right]])#去重位置2while(left<right and nums[left]==nums[left+1]):left=left+1while(left<right and nums[right]==nums[right-1]):right=right-1left += 1right -= 1elif nums[left] + nums[i] + nums[right] < 0:left += 1else:right -= 1return res

本题时间复杂度为O(n^2),所以可以先排序。线确定一个数后确定另两个数时解法类似第一题两数之和,需要注意的点是容易产生重复,上述代码有两个位置要进去去重操作。1316ms,16.2MB

16. 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

1.排序+双指针

class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:nums.sort()length = len(nums)sum_value = 0min_value = float(inf)for i in range(length-2):left = i+1right = length-1while(left<right):sum_value = nums[i]+nums[right]+nums[left]if abs(sum_value-target) < abs(min_value):min_value = sum_value-targetif sum_value<target:left += 1elif sum_value == target:return targetelse:right -= 1return min_value+target

和上面基本一模一样。148ms,13.7MB

18. 四数之和

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:

答案中不可以包含重复的四元组。

1.排序+双指针

class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:nums.sort()length = len(nums)max_value = 0ans = []for i in range(length-3):if i>0 and nums[i] == nums[i-1]:continuefor j in range(i+1, length-2):if j > i+1 and nums[j] == nums[j-1]:continueleft = j+1right = length-1while(left<right):if nums[i]+nums[j]+nums[right]+nums[left] == target:ans.append([nums[i], nums[j], 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 nums[i]+nums[j]+nums[right]+nums[left] < target:left += 1else:right -= 1return ans

依旧和上面差不多,虽然思路一样,但是可以在代码中添加限制条件进行continue、break或者直接return来加快运算速度,这里我没加。2184ms, 13.7MB。

从零开始刷Leetcode——数组(11.15.16.18)相关推荐

  1. 从零开始刷Leetcode——数组(896.905.914.922)

    文章目录 896. 单调数列 905. 按奇偶排序数组 914. 卡牌分组 922. 按奇偶排序数组 II 896. 单调数列 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i &l ...

  2. 从零开始刷Leetcode——数组(532.561)

    文章目录 532. 数组中的K-diff数对 561. 数组拆分 I 532. 数组中的K-diff数对 给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对.这里将 k-d ...

  3. 从零开始刷Leetcode——数组(189.217.219)

    文章目录 189.旋转数组 217.存在重复元素 217.存在重复元素 II 189.旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 1.定义一个新数组 class ...

  4. 从零开始刷Leetcode——数组(122.167.169)

    文章目录 122.买卖股票的最佳时机 II 167.两数之和II 169.多数元素 122.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计 ...

  5. 从零开始刷Leetcode——数组(1.26)

    文章目录 1.两数之和 26.删除排序数组中的重复项 马上要去读研了,作为一个转码的ee学生,刷题还是很必要的.从零开始,希望能坚持下去!打算按照类别和难度慢慢刷,一天两三道题左右,争取明年夏季找实习 ...

  6. 从零开始刷Leetcode——数组(941.977)

    文章目录 941. 有效的山脉数组 977. 有序数组的平方 三级目录 941. 有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下, ...

  7. 从零开始刷Leetcode——数组(830.849.888)

    文章目录 830. 较大分组的位置 849. 到最近的人的最大距离 888. 公平的糖果交换 830. 较大分组的位置 在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组. 例 ...

  8. 从零开始刷Leetcode——数组(697.717.724)

    文章目录 697. 数组的度 717. 1比特与2比特字符 724. 寻找数组的中心索引 697. 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数 ...

  9. 从零开始刷Leetcode——数组(581.605.628)

    文章目录 581. 最短无序连续子数组 605.种花问题 628. 三个数的最大乘积 581. 最短无序连续子数组 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个 ...

最新文章

  1. 软考网络工程师身份证忘记领取啦怎么办
  2. 《计算机网络》常考概念、英文缩写、公式大全
  3. 揭秘|多伦多大学反人脸识别,身份欺骗成功率达99.5%
  4. 编码区和非编码区的关系
  5. 函数ZwQuerySystemInformation小结
  6. 利用关系数据库开展智能化营销新思路详解
  7. OSPF第十章:OSPF 一
  8. android运行的线程中,android中线程是否运行在单独的进程中?
  9. echarts-formatter
  10. 在wamp集成环境中添加mysql操作记录
  11. 【NLP】Dive into BERT:语言模型与知识
  12. (一)【模电】(第一章 常用半导体器件)半导体基础知识
  13. Python的学习笔记案例4--52周存钱挑战1.0
  14. ESXi主机从6.7升级到ESXi 7.0.3后无法识别Emulex LPe12000 HBA卡
  15. 为什么csgo一直显示连接官方服务器失败,CSGO提示连接任意官方服务器失败怎么办?五大详细解决方法看这里!...
  16. html banner广告代码,jquery实现的Banner广告收缩效果代码
  17. 从容器中获取宿主机IP地址
  18. C# 操作Word——设置Word文档背景色(纯色、渐变色、图片背景色)
  19. X3D代码理解之demo(cfg)
  20. deepin+win10EFI分区删了/开机没有win的启动项解决方法

热门文章

  1. mybatis中#{}和${}
  2. VS2005发送电子邮件(转)
  3. 2016 中国大数据技术大会 相关资料
  4. ant编译mysql驱动
  5. 5.Struts2配置形式,覆盖
  6. ssh登录到esxi机器中后开关虚拟机
  7. 一个软件测试员的工作与学习(二)
  8. 也说 Jquery+ASP.NET 实现开心网上传头像剪裁功能
  9. wamp php 安装redis,wampServer的php安装Redis 扩展
  10. java连接mysql数据库 R,java连接MySql数据库!