LeetCode初级算法--数组02:旋转数组

LeetCode初级算法--数组02:旋转数组

搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法、机器学习干货python

csdn:https://blog.csdn.net/baidu_31657889/git

csdn:https://blog.csdn.net/abcgkj/github

github:https://github.com/aimi-cn/AILearners面试

1、引子

这是由LeetCode官方推出的的经典面试题目清单~
这个模块对应的是探索的初级算法~旨在帮助入门算法。咱们第一遍刷的是leetcoda推荐的题目。
查看完整的剑指Offer算法题解析请点击github连接:
github地址算法

2、题目

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

示例 1:数组

输入: [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]复制代码

示例 2:微信

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释: 
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]复制代码

说明:机器学习

  • 尽量想出更多的解决方案,至少有三种不一样的方法能够解决这个问题。
  • 要求使用空间复杂度为 O(1) 的 原地 算法。

一、思路

咱们能够看出旋转以后的结果是以最后个K值为界限先后进行调换。因此咱们使用数组的切片操做。学习

二、编程实现

python

class Solution(object):
    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: None Do not return anything, modify nums in-place instead.
        """

        #切片操做1
        # while k > len(nums):
        #     k -=len(nums)
        # changed = nums[-k:] + nums[:-k]
        # for i in range(len(changed)):
        #     nums[i] = changed[i]

        #切片操做2
        i = k % len(nums)  #保证循环次数在0-len(nums)之间
        nums[:] = nums[-i:]+nums[:-i]  #切割成两块从新组合
复制代码

AIMI-CN AI学习交流群【1015286623】 获取更多AI资料

分享技术,乐享生活:咱们的公众号计算机视觉这件小事每周推送“AI”系列资讯类文章,欢迎您的关注!

本文由博客一文多发平台 OpenWrite 发布!

相关文章
相关标签/搜索