文章目录

  • 189.旋转数组
  • 217.存在重复元素
  • 217.存在重复元素 II

189.旋转数组

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

1.定义一个新数组

class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""length = len(nums)temp = [0]*lengthfor i in range(length):if i+k <= length-1:temp[i+k] = nums[i]else:temp[(i+k)%length] = nums[i]for i in range(length):nums[i] = temp[i]

很好理解也比较笨的办法。48ms,13.9MB

2.巧妙方法

class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""k = k % len(nums)if k == 0:returnnums[:-k], nums[-k:] = nums[-k:], nums[:-k]return

这个切片方式只有python能用,比较巧妙。40ms,13.8MB

3,切片

class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""nums[:] = nums[-(k%len(nums)):] + nums[:-(k%len(nums))]

python切片,40ms,13.9MB

4.插入

class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)k %= nfor _ in range(k):nums.insert(0, nums.pop())

pop和insert比较费时,132ms,13.9MB

5.三重翻转

class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)k %= nnums[:] = nums[::-1]nums[:k] = nums[:k][::-1]nums[k:] = nums[k:][::-1]

思想是三次翻转,第一次翻转[0,n-k-1],第二次翻转[n−k,n−1],第三次翻转整体。只是借助切片的方式实现。36ms,13.9MB

217.存在重复元素

给定一个整数数组,判断是否存在重复元素。

如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false

1.哈希表

class Solution:def containsDuplicate(self, nums: List[int]) -> bool:length = len(nums)if length == 0:return Falsedict = {}for i in range(length):if nums[i] in dict.keys():dict[nums[i]] += 1else:dict[nums[i]] = 1for j in dict:if dict[j] >1:return Truereturn False

把数组转换成字典,键为数组的值,值为次数。56ms,20.5MB

2.利用python中的集合

class Solution:def containsDuplicate(self, nums: List[int]) -> bool:return len(nums) != len(set(nums))

python集合可以去除掉重复值,取巧了。44ms,18.8MB

3,.排序法

class Solution:def containsDuplicate(self, nums: List[int]) -> bool:nums.sort()for i in range(len(nums)-1):if nums[i+1] == nums[i]:return Truereturn False

有重复的排序后必相邻。76ms,16.8MB

4.哈希表改

class Solution:def containsDuplicate(self, nums: List[int]) -> bool:dic = {}for i in nums:if dic.get(i):return Truedic[i] = 1return False

自己写的还是差点,再多练练。56ms,20.6MB

217.存在重复元素 II

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。

1.哈希表

class Solution:def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:length = len(nums)dict = {}for i in range(length):if nums[i] in dict and i-dict[nums[i]] <= k:return Trueelse:dict[nums[i]] = ireturn False

也是转换成字典,和上面的区别是键为数组元素的值,键为所在位置,如果k范围内有重复则返回True,若重复不在k范围则更新字典对应键的值。68ms,21.4MB

2.不明觉厉的算法

class Solution:def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:r, d = k + 1, {}for i, n in enumerate(nums):r, d[n] = min(r, i - d.get(n, -k - 1)), ireturn r <= k

一个大佬写的,有点难理解,52ms,21MB

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

  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. 金融学习纲要与相关知识
  2. C#操作快捷方式(获取快捷方式属性、创建快捷方式)
  3. linux 怎么设置静态ip,如何在Linux中设置静态IP地址和配置网络
  4. 案例八:shell自动化管理账本脚本
  5. AcWing321.棋盘分割(区间DP)题解
  6. APP,webapp 设计相关资料汇集区
  7. linux usb拔出防止抖动,Linux 下监控USB设备拔插事件
  8. 算法音乐往事:二次元女神“初音未来”诞生记
  9. matlab的基本语法规则_MATLAB语法规则
  10. 基于胜任力模型的项目经理岗位培训需求分析研究
  11. java定时器表达式_Java Quartz表达式每分钟执行1次
  12. 模2除法介绍(CRC校验码计算)
  13. 合格CTO附加值:CTO教你怎样把一个价值0.5元苹果卖到100万元
  14. Javascript 判断一个数是否为素数的三种解法
  15. 汽车保养技巧 十大汽车保养技巧
  16. UE4开发PSVR游戏的常见问题
  17. 幼儿园计算机课件制作评比表,幼儿园课件制作基本原则与评价标准_表格评价.doc...
  18. pyecharts加载不出html图片,已解决
  19. 光源对于全景拍摄的影响
  20. 日语 办公用品类日语单词总结

热门文章

  1. Django 使用第三方服务发送电子邮件
  2. atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)
  3. 3. Mac 下安装python
  4. MVC ---- 如何扩展方法
  5. Linux服务器的常用备份方法
  6. python3档案管理程序源码_php人事档案管理系统,源码免费分享
  7. thinkphp3 页面跳转外部链接_PPT超链接使用全攻略,你必懂的基本技巧!
  8. new hashmap 初始大小_你们要的HashMap工作原理!它来了!!!
  9. C++ 内存空间初探
  10. php设置ip,php curl如何设置ip