从零开始刷Leetcode——数组(448.485.509)
文章目录
- 448. 找到所有数组中消失的数字
- 485.最大连续1的个数
- 509. 斐波那契数
448. 找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
找到所有在 [1, n] 范围之间没有出现在数组中的数字。
要求不使用额外空间且时间复杂度为O(n),返回的数组不算在额外空间内。
1.利用额外的列表
class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:length = len(nums)res = [0]*lengthfor i in range(length):res[nums[i]-1] = 1for i in range(length):if res[i] == 0:res.append(i+1)return res[length:]
本题有额外要求,所以之前那个题的方法都不适用。此方法先将返回的列表都初始化为0,将每个在原列表中出现的元素在新列表中对应的索引设为1,最终新列表中为0的元素即为缺失值,要注意一点原列表是1到n,所以有个减1操作,460ms,21.7MB
2.利用绝对值
class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:for n in nums:nums[abs(n) - 1] = -abs(nums[abs(n) - 1])return [i + 1 for i, n in enumerate(nums) if n > 0]
每个原列表值对应的索引的值由正变负,没变负的索引号就是缺失值。548ms,21.1MB
485.最大连续1的个数
给定一个二进制数组, 计算其中最大连续1的个数。
1.暴力搜索
class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:max_count = 0count = 0for i in nums:if i == 1:count += 1 else:count = 0max_count = max(max_count, count)return max_count
直接遍历搜索,比较慢。520ms,14MB
2.转字符串按0切割
class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:return len(max(''.join(map(str, nums)).split('0')))
504ms,14.6MB
509. 斐波那契数
返回第N个斐波那契数
1.递归
class Solution:def fib(self, N: int) -> int:if N == 0:return 0elif N == 1 :return 1else:return self.fib(N-1) + self.fib(N-2)
848ms,13.7MB
2.动态规划
class Solution:def fib(self, n: int) -> int:# solution two: 动态规划dp_0, dp_1 = 0, 1for _ in range(n):dp_0, dp_1 = dp_1, dp_0 + dp_1return dp_0
动态规划就是比递归快啊。40ms,13.6MB
3.数学方法
一共两中数学方法,一种矩阵幂,一种公式,代码就不写了
从零开始刷Leetcode——数组(448.485.509)相关推荐
- 从零开始刷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, 数组的度的定义是指数组里任一元素出现频数 ...
最新文章
- 中国研究的超级系统计算机,学习电脑 - Book3 - V1.30 - 超级系统恢复
- 基于ISO的本地yum源配置
- USART_GetITStatus和USART_GetFlagStatus的区别
- pytorch学习入门 (二) Variable(变量)
- 项目经理到底要不要懂技术?
- jmeter的java测试框架_性能测试学习之路 (四)jmeter 脚本开发实战(JDBC JMS 接口脚本 轻量级接口自动化测试框架)...
- 解决虚拟机卡 鼠标拖动很慢 有效解决办法
- 27.Yii App应用
- IntelliJ IDEA破解和汉化
- 需求与商业模式分析-2-商业模式类型
- php 生成不重复的会员卡号,php生成一个不重复的会员号
- java指定浏览器_java程序中指定某个浏览器打开的实现方法
- 人脸检测——RetinaFace
- 从0开始的TypeScriptの八:类
- 计算机在线视频不能播放是什么原因,电脑不能播放视频是怎么回事
- 线段树+KMP-hdu-4125-Moles
- {typedir} {style} {tid} {aid} 分别是什么意思?
- 用c语言编写匀速直线运动,匀速直线运动知识点总结
- 以下不属于C语言字符集的为,c语言第1章练习题答案
- 什么是证书透明度(Certificate Transparency,CT)?
热门文章
- 纠结的rename命令
- 想要定位其中的iframe并切进去的定位方法
- 2015 年最流行的 10 个 Linux 发行版
- Nginx 1.5.2 + PHP 5.5.1 + MySQL 5.6.10 在 CentOS 下的编译安装
- 23_触发器_库存与订单实战
- cisco初级随堂笔记1
- sqlalchemy mysql教程_SQLAlchemy 教程 —— 基础入门篇
- linux 指定范围内查找文件,Linux Find命令查找指定时间范围内的文件的例子
- 手机自动化测试IDE --手把手教你用Airtest模拟器来连接手机
- 功能测试用例不好写?来自阿里大佬的设计方法分享