从零开始刷Leetcode——数组(189.217.219)
文章目录
- 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)相关推荐
- 从零开始刷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, 数组的度的定义是指数组里任一元素出现频数 ...
最新文章
- 金融学习纲要与相关知识
- C#操作快捷方式(获取快捷方式属性、创建快捷方式)
- linux 怎么设置静态ip,如何在Linux中设置静态IP地址和配置网络
- 案例八:shell自动化管理账本脚本
- AcWing321.棋盘分割(区间DP)题解
- APP,webapp 设计相关资料汇集区
- linux usb拔出防止抖动,Linux 下监控USB设备拔插事件
- 算法音乐往事:二次元女神“初音未来”诞生记
- matlab的基本语法规则_MATLAB语法规则
- 基于胜任力模型的项目经理岗位培训需求分析研究
- java定时器表达式_Java Quartz表达式每分钟执行1次
- 模2除法介绍(CRC校验码计算)
- 合格CTO附加值:CTO教你怎样把一个价值0.5元苹果卖到100万元
- Javascript 判断一个数是否为素数的三种解法
- 汽车保养技巧 十大汽车保养技巧
- UE4开发PSVR游戏的常见问题
- 幼儿园计算机课件制作评比表,幼儿园课件制作基本原则与评价标准_表格评价.doc...
- pyecharts加载不出html图片,已解决
- 光源对于全景拍摄的影响
- 日语 办公用品类日语单词总结
热门文章
- Django 使用第三方服务发送电子邮件
- atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)
- 3. Mac 下安装python
- MVC ---- 如何扩展方法
- Linux服务器的常用备份方法
- python3档案管理程序源码_php人事档案管理系统,源码免费分享
- thinkphp3 页面跳转外部链接_PPT超链接使用全攻略,你必懂的基本技巧!
- new hashmap 初始大小_你们要的HashMap工作原理!它来了!!!
- C++ 内存空间初探
- php设置ip,php curl如何设置ip