从零开始刷Leetcode——数组(581.605.628)
文章目录
- 581. 最短无序连续子数组
- 605.种花问题
- 628. 三个数的最大乘积
581. 最短无序连续子数组
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
你找到的子数组应是最短的,请输出它的长度。
1.排序
class Solution:def findUnsortedSubarray(self, nums: List[int]) -> int:num1 = sorted(nums)left =float("inf")right = 0for i in range(len(num1)):if num1[i] != nums[i]:left = min(left, i)right = max(right, i)if right - left + 1 > 0:return right - left + 1else:return 0
将排序后的数组和原数组对比,第一个不同的值与最后一个不同值的差即所得解。296ms,15.1MB
2.两次遍历
class Solution:def findUnsortedSubarray(self, nums: List[int]) -> int:n=len(nums)max_num=nums[0]right=0for i in range(n):if(nums[i]>=max_num):max_num=nums[i]else:right=ileft=nmin_num=nums[-1]for i in range(n-1,-1,-1):if(nums[i]<=min_num):min_num=nums[i]else:left=ireturn right-left+1 if(right-left+1 >0) else 0
244ms,14.9MB
605.种花问题
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。
1.贪心查找
class Solution:def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:if n == 0:return Trueflowerbed.insert(0, 0)flowerbed.append(0)for i in range(1, len(flowerbed)-1):if flowerbed[i-1] != 1 and flowerbed[i+1] != 1 and flowerbed[i] == 0:n -= 1flowerbed[i] = 1if n == 0:return Truereturn False
前后各插入一个0可以让计算更容易,然后遍历即可。200ms,14.1MB
2.判断是否三个0连续
class Solution:def canPlaceFlowers(self, f: List[int], n: int) -> bool:sums = 0i = 0f.insert(0,0)f.insert(len(f),0)while i in range(len(f) - 2):if f[i] == 0 and f[i + 1] == 0 and f[i + 2] == 0:sums += 1i += 1i += 1if n <= sums:return Trueelse:return False
依旧收尾加0,有三个0连续代表可以种花。296ms,13.9MB
628. 三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
1.排序
class Solution:def maximumProduct(self, nums: List[int]) -> int:nums.sort()return max(nums[0]*nums[1]*nums[-1], nums[-1]*nums[-2]*nums[-3])
一共两种情况,最大的三个正数的乘积、最大的正数和最小的两个负数的乘积,排序后比较即可。
364ms,14.6MB
一次遍历得到上述五个值速度快点,但是代码较长不写了。
从零开始刷Leetcode——数组(581.605.628)相关推荐
- 从零开始刷Leetcode——数组(1.26)
文章目录 1.两数之和 26.删除排序数组中的重复项 马上要去读研了,作为一个转码的ee学生,刷题还是很必要的.从零开始,希望能坚持下去!打算按照类别和难度慢慢刷,一天两三道题左右,争取明年夏季找实习 ...
- 从零开始刷Leetcode——数组(11.15.16.18)
文章目录 11. 盛最多水的容器 15. 三数之和 16. 最接近的三数之和 18. 四数之和 前800题easy难度想做的已经做完了,之后是medium难度 11. 盛最多水的容器 给你 n 个非负 ...
- 从零开始刷Leetcode——数组(122.167.169)
文章目录 122.买卖股票的最佳时机 II 167.两数之和II 169.多数元素 122.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计 ...
- 从零开始刷Leetcode——数组(941.977)
文章目录 941. 有效的山脉数组 977. 有序数组的平方 三级目录 941. 有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下, ...
- 从零开始刷Leetcode——数组(896.905.914.922)
文章目录 896. 单调数列 905. 按奇偶排序数组 914. 卡牌分组 922. 按奇偶排序数组 II 896. 单调数列 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i &l ...
- 从零开始刷Leetcode——数组(830.849.888)
文章目录 830. 较大分组的位置 849. 到最近的人的最大距离 888. 公平的糖果交换 830. 较大分组的位置 在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组. 例 ...
- 从零开始刷Leetcode——数组(746.747)
文章目录 747. 至少是其他数字两倍的最大数 746. 使用最小花费爬楼梯 747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是 ...
- 从零开始刷Leetcode——数组(31.33)
文章目录 31. 下一个排列 33. 搜索旋转排序数组 31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重 ...
- 从零开始刷Leetcode——数组(697.717.724)
文章目录 697. 数组的度 717. 1比特与2比特字符 724. 寻找数组的中心索引 697. 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数 ...
最新文章
- 如何动态修改windows下的host文件
- reactjs组件的生命周期函数:getDerivedStateFromProps
- python赋值语句的一般格式为_[零基础学Python]赋值,简单也不简单
- Hadoop0.20.2版本在Ubuntu下安装和配置
- es6分享——变量的解构赋值
- 树形结构 —— 树与二叉树 —— 树的中心
- python寻路_【Python】 Numpy极简寻路
- oracle 11g 静默安装
- 零基础学python书籍-0基础学python,有什么教程或者书可以推荐吗?
- 百叶窗叶片锋利,不安全
- MacBook Pro(13 英寸,2011 年末)A1278 官方最高支持macOS High Sierra,使用macOS Catalina Patcher成功安装macOS Catalina
- 数学建模入门篇(0基础必看,全是自己的经验)
- [C#] [GIS] 关于椭球七参数和高斯投影正反算的一些总结
- SBC芯片35584数据手册预调节器翻译
- C语言学习-- 计算机原理及二进制
- VSCode自定义网络背景皮肤
- win10 启用.net 3.5 iis错误0x800f081f
- 《按自己的意愿过一生》语录二
- IdentityServer4 获取Token及刷新Token
- 谷歌2022年共发放1200万美元赏金,单个最高60.5万美元