网站建设教程(任务2签订网站建设合同)题库,安装好的字体怎么用wordpress,可以上传自己做的视频的网站吗,南昌网站建设方案#左耳听风 ARST 打卡活动重启#
目录 一、问题 二、解题方法一 三、解题方法二
四、两种方法的区别 关于 ARTS 的释义 —— 每周完成一个 ARTS#xff1a; ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个…#左耳听风 ARST 打卡活动重启#
目录 一、问题 二、解题方法一 三、解题方法二
四、两种方法的区别 关于 ARTS 的释义 —— 每周完成一个 ARTS ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个技术技巧 ● Share: 分享一篇有观点和思考的技术文章
希望通过此次活动能聚集一波热爱技术的人延续好奇、探索、实践、分享的精神。 一、问题 给定一个整数数组 nums将数组中的元素向右轮转 k 个位置其中 k 是非负数。 示例 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:n len(nums)k % nnums.extend(nums[:k])nums[:k] nums[-k:]这段代码实现了一个函数 rotate,用于将给定的整数数组 nums 向右轮转 k 个位置。 函数的输入参数有两个 - 一个整数数组 nums,表示需要进行旋转操作的数组。 - 一个非负整数 k,表示需要向右旋转的位置数。注意这里的 k 取模 n(即 k % n),因为当 k 大于等于 n 时只需要进行一次完整的旋转即可。 函数的主要思路是将数组分为两部分前 k 个元素和剩余的元素然后将这两部分分别拼接起来得到旋转后的数组。具体实现过程如下 1. 首先计算出数组的长度 n,以及对 n 取模的结果 k % n。这是因为当 k 大于等于 n 时只需要进行一次完整的旋转即可。 2. 然后使用列表的 extend() 方法在数组末尾添加前 k 个元素。这样就得到了一个新的数组其中前 k 个元素为原数组的前半部分剩余的元素为原数组的后半部分。 3. 最后使用列表切片的方式将新数组中剩余的元素移动到前面即可得到旋转后的数组。具体来说我们可以将新数组中的第 k 个元素到最后一个元素取出然后将其放到新数组的前半部分中对应的位置上。这样就可以完成整个旋转操作了。 总之这段代码的时间复杂度为 O(n),空间复杂度为 O(1)。 三、解题方法二 另一种解题方法是使用双指针法。具体来说我们可以定义两个指针 left 和 right,分别指向数组的开头和结尾。然后进行以下操作 1. 将 left 指针向右移动 k 个位置直到它指向数组的第 k 个元素为止。 2. 将 right 指针向左移动 k 个位置直到它指向数组的第 n-k 个元素为止。 3. 将 left 和 right 指针所指向的两个元素交换位置即可完成旋转操作。 这种方法的时间复杂度为 O(n),空间复杂度为 O(1)。 def rotate(nums, k):n len(nums)k % n # 对 n 取模防止 k 大于等于 n 的情况left, right 0, n - 1for _ in range(k):temp nums[left]nums[left] nums[right]nums[right] templeft 1right - 1四、两种方法的区别 两种方法的区别在于单指针法只能找到一个满足条件的元素而双指针法则可以在 O(n) 的时间复杂度内找到所有满足条件的元素。具体来说单指针法从数组的开头开始遍历如果找到了一个满足条件的元素就返回该元素的位置否则继续向后遍历直到遍历完整个数组。而双指针法则从数组的两端开始遍历每次移动一个指针当两个指针相遇时就将它们所指向的元素交换位置。这样就可以保证每个元素都被访问过一次。