<LeetCode天梯>Day005 旋转数组 (切片法) | 初级算法 | Python

简介: <LeetCode天梯>Day005 旋转数组 (切片法) | 初级算法 | Python

今天在学校监考校招(赚点零花钱,低保和劳务一月没发了,哎),继续刷题吧!~


今天再和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~


以下为我的天梯积分规则:


每日至少一题:一题积分+10分

若多做了一题,则当日积分+20分(+10+10)

若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)


初始分为100分

若差一天没做题,则扣积分-10分(周六、周日除外注:休息)

坚持!!!


初级算法

刷题目录

数组


image.png

image.png

题干

给定一个数组,将数组中的元素向右移动 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]


示例2:


输入:nums = [-1,-100,3,99], k = 2

输出:[3,99,-1,-100]

解释:

向右旋转 1 步: [99,-1,-100,3]

向右旋转 2 步: [3,99,-1,-100]


分析:


我这里想到的是用冒泡的思想,一个一个的往后移动,但是超出了时间范围,运行是可以运行的。

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

遇到最后几个超大型的数组时,会戎机,超出时间限制。

然后咱们再优化优化一下看看:

是否可以用对数组的切片来实现旋转,切片成两部分,然后再反过来拼接起来,其实就一句

nums[:] = nums[n-k:] + nums[:n-k]

然鹅,发现自己还是太年轻了,没有考虑到,如果数组数少于移动次数,那么就会不满足上述情况,所以就不能做切片。

我们再优化优化,用nums的个数个K的数取余数,看是否k大于len(nums),咱们再加一条判断试试

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

image.png

效果虽然不是最好,但是Python说是yyds,一点已不为过吧~

image.png

image.png


相关文章
|
3月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
141 63
|
3月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
4月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
47 2
|
4月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
58 0
|
4月前
|
索引 Python
Python 高级编程:深入探索字符串切片
在Python中,字符串切片功能强大,可灵活提取特定部分。本文详细介绍切片技巧:基本切片、省略起始或结束索引、使用负数索引、设定步长及反转字符串等。此外,还介绍了如何结合其他操作进行切片处理,如先转换大小写再提取子串。 来源:https://www.wodianping.com/yeyou/2024-10/48238.html
66 4
|
5月前
|
数据处理 Python
Python切片魔法:一行代码实现高效数据处理
Python切片魔法:一行代码实现高效数据处理
39 0
|
6月前
|
数据处理 索引 Python
Python 中的切片
【8月更文挑战第29天】
66 4
|
6月前
|
机器学习/深度学习 数据可视化 API
Python Numpy 切片和索引(高级索引、布尔索引、花式索引)
Python Numpy 切片和索引(高级索引、布尔索引、花式索引)
70 3
|
6月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
69 1
|
6月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
94 1

热门文章

最新文章

推荐镜像

更多