【初级算法】旋转数组 2021.8.6
2021/8/6 9:36:03
本文主要是介绍【初级算法】旋转数组 2021.8.6,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【旋转数组】题目:
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
进阶:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?
示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2skh7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1.0 自己尝试解答
1 class Solution(object): 2 def rotate(self, nums, k): 3 """ 4 :type nums: List[int] 5 :type k: int 6 :rtype: None Do not return anything, modify nums in-place instead. 7 """ 8 if len(nums)<2: 9 return nums 10 while k != 0: 11 j = len(nums)-1 # 控制最后一位数的变量 12 n = nums[j] # 把最后一位数赋值给一个变量储存起来 13 for i in range(j-1, -1, -1): 14 nums[i+1] = nums[i] 15 k = k-1 16 if k == 0: 17 nums[0] = n 18 return nums 19 20 # 没有考虑到循环 21 22 if __name__ == '__main__': 23 rot = Solution().rotate([1,2,3,4,5,6,7],3) 24 print(rot)Code 1.0
反思:没有考虑到循环
2.0 看了颠倒列表法的思路后自己尝试编写
这道题可以分解为两个问题:
1、取出元素。pop函数
2、添加到头部/尾部。添加到头部比较困难,append添加到尾部比较简单+reverse函数。
1 class Solution(object): 2 def rotate(self, nums, k): 3 """ 4 :type nums: List[int] 5 :type k: int 6 :rtype: None Do not return anything, modify nums in-place instead. 7 """ 8 if len(nums)<2: 9 return nums 10 else: 11 nums.reverse() 12 while k != 0: 13 n = nums.pop(0) 14 nums.append(n) 15 k = k-1 16 if k == 0: 17 nums.reverse() 18 return nums 19 nums.reverse() 20 return nums #超出时间限制 21 if __name__ == '__main__': 22 rot = Solution().rotate([1,2],0) 23 print(rot)Code2.0
问题:超出时间限制
原因:
这篇关于【初级算法】旋转数组 2021.8.6的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01Java部署教程:新手入门指南
- 2024-11-01Java部署教程:从入门到实践
- 2024-11-01Java订单系统教程:新手入门指南
- 2024-11-01Java分布式教程:新手入门指南
- 2024-11-01Java管理系统教程:新手入门详解
- 2024-11-01Java监控系统教程:从入门到实践
- 2024-11-01SpringCloud Alibaba入门:轻松搭建微服务架构
- 2024-11-01Swagger入门:新手必读指南
- 2024-11-01Swagger入门:轻松搭建API文档
- 2024-11-01uni-APP入门:新手快速上手指南