页面加载中…
通过率 66% · 提交 263 · 通过 174
小慕正在处理一个数据排列的问题。他从标准输入中分两行输入一个数字列表和一个数字k,需要输出该列表后的结果。 所谓旋转k位,指的是列表中的每一个元素向右移动k位,即原来在位置i的元素,在新数组中的位置是(即如果i+k超过n时,则从数组开始位置进行填充)。
这类题属于算法机考高频题型中「基础语法 / 循环语句」方向的高频题型,通常考察对「基础语法 / 循环语句」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
输入两行。 第一行是一个用空格隔开的数组 第二行是一个整数表示k
输出一行,用空格隔开原数组旋转k位后的结果。
示例 1
输入示例
1 2 3 4 5 2
输出示例
4 5 1 2 3
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
这些是真正决定能不能 AC、但通用题解里常被略过的点。
nums,第二行整数 k。k %= n(一整圈旋转 n 位等于没转,先取模)。k 位等价于把最后 k 个元素整体移到前面,其余元素依次后移。rotated = nums[-k:] + nums[:-k];k == 0 时直接用原列表。设 n 为列表长度:
k %= n 是 O(1);两个切片各复制列表的一段、再拼接成新列表,每个元素恰好被复制一次;最后 ' '.join 输出也是一次线性扫描。k %= n:当 k >= n 时若直接切片,nums[-k:] 会退化成整个列表,得到「没有旋转」的错误结果。k 可能为 0(k 恰是 n 的倍数),此时 nums[:-0] 即 nums[:0] 是空列表,代码里用条件表达式单独返回原列表来规避这类切片歧义。nums = list(map(int, input().split()))
k = int(input())
n = len(nums)
k %= n
rotated = nums[-k:] + nums[:-k] if k != 0 else nums
print(' '.join(map(str, rotated)))登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有