文章目录

  • 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)相关推荐

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

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

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

    文章目录 11. 盛最多水的容器 15. 三数之和 16. 最接近的三数之和 18. 四数之和 前800题easy难度想做的已经做完了,之后是medium难度 11. 盛最多水的容器 给你 n 个非负 ...

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

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

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

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

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

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

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

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

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

    文章目录 747. 至少是其他数字两倍的最大数 746. 使用最小花费爬楼梯 747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是 ...

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

    文章目录 31. 下一个排列 33. 搜索旋转排序数组 31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重 ...

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

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

最新文章

  1. 中国研究的超级系统计算机,学习电脑 - Book3 - V1.30 - 超级系统恢复
  2. 基于ISO的本地yum源配置
  3. USART_GetITStatus和USART_GetFlagStatus的区别
  4. pytorch学习入门 (二) Variable(变量)
  5. 项目经理到底要不要懂技术?
  6. jmeter的java测试框架_性能测试学习之路 (四)jmeter 脚本开发实战(JDBC JMS 接口脚本 轻量级接口自动化测试框架)...
  7. 解决虚拟机卡 鼠标拖动很慢 有效解决办法
  8. 27.Yii App应用
  9. IntelliJ IDEA破解和汉化
  10. 需求与商业模式分析-2-商业模式类型
  11. php 生成不重复的会员卡号,php生成一个不重复的会员号
  12. java指定浏览器_java程序中指定某个浏览器打开的实现方法
  13. 人脸检测——RetinaFace
  14. 从0开始的TypeScriptの八:类
  15. 计算机在线视频不能播放是什么原因,电脑不能播放视频是怎么回事
  16. 线段树+KMP-hdu-4125-Moles
  17. {typedir} {style} {tid} {aid} 分别是什么意思?
  18. 用c语言编写匀速直线运动,匀速直线运动知识点总结
  19. 以下不属于C语言字符集的为,c语言第1章练习题答案
  20. 什么是证书透明度(Certificate Transparency,CT)?

热门文章

  1. 纠结的rename命令
  2. 想要定位其中的iframe并切进去的定位方法
  3. 2015 年最流行的 10 个 Linux 发行版
  4. Nginx 1.5.2 + PHP 5.5.1 + MySQL 5.6.10 在 CentOS 下的编译安装
  5. 23_触发器_库存与订单实战
  6. cisco初级随堂笔记1
  7. sqlalchemy mysql教程_SQLAlchemy 教程 —— 基础入门篇
  8. linux 指定范围内查找文件,Linux Find命令查找指定时间范围内的文件的例子
  9. 手机自动化测试IDE --手把手教你用Airtest模拟器来连接手机
  10. 功能测试用例不好写?来自阿里大佬的设计方法分享