Java教程

【初级算法】旋转数组 2021.8.6

本文主要是介绍【初级算法】旋转数组 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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!