【LeetCode每日一题】——189.轮转数组

news/2024/12/4 20:53:23/

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【题目进阶】
  • 八【解题思路】
  • 九【时空频度】
  • 十【代码实现】
  • 十一【提交结果】

一【题目类别】

二【题目难度】

  • 中等

三【题目编号】

四【题目描述】

  • 给定一个整数数组 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]

六【题目提示】

  • 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
  • − 2 31 < = n u m s [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1 231<=nums[i]<=2311
  • 0 < = k < = 1 0 5 0 <= k <= 10^5 0<=k<=105

七【题目进阶】

  • 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
  • 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?

八【解题思路】

  • 假设需要轮转k个位置,那么我们需要进行三次翻转:
    • 第一次翻转:翻转整个数组,此时需要移动的元素已经到了数组的开始,其余元素在数组的后面
    • 第二次翻转:将第一次翻转到数组开始的k个元素翻转,这样就变成了正常的顺序
    • 第三次翻转,将第一次翻转到数组后面的剩余元素翻转,这样也变成了正常的顺序
  • 当然,我们还要合理的处理k以避免溢出
  • 该题不需要返回结果
  • 具体细节可以参考下面的代码

九【时空频度】

  • 时间复杂度: O ( n ) O(n) O(n) n n n为传入的数组的长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

十【代码实现】

  1. Java语言版
class Solution {public void rotate(int[] nums, int k) {// 防止溢出int n = nums.length;k %= n;// 第一次翻转:翻转整个数组,此时需要移动的元素已经到了数组的开始,其余元素在数组的后面reverse(nums, 0, n - 1);// 第二次翻转:将第一次翻转到数组开始的k个元素翻转,这样就变成了正常的顺序reverse(nums, 0, k - 1);// 第三次翻转,将第一次翻转到数组后面的剩余元素翻转,这样也变成了正常的顺序reverse(nums, k, n - 1);}// 翻转数组private void reverse(int[] nums, int start, int end) {while (start < end) {int temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++;end--;}}}
  1. Python语言版
class Solution:def rotate(self, nums: List[int], k: int) -> None:# 防止溢出k %= len(nums)# 第一次翻转:翻转整个数组,此时需要移动的元素已经到了数组的开始,其余元素在数组的后面self.reverse(nums, 0, len(nums) - 1)# 第二次翻转:将第一次翻转到数组开始的k个元素翻转,这样就变成了正常的顺序self.reverse(nums, 0, k - 1)# 第三次翻转,将第一次翻转到数组后面的剩余元素翻转,这样也变成了正常的顺序self.reverse(nums, k, len(nums) - 1)# 翻转数组def reverse(self, nums, start, end):while start < end:temp = nums[end]nums[end] = nums[start]nums[start] = tempstart += 1end -= 1
  1. C语言版
// 翻转数组
void reverse(int* nums, int start, int end)
{while (start < end){int temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++;end--;}
}void rotate(int* nums, int numsSize, int k)
{// 防止溢出k %= numsSize;// 第一次翻转:翻转整个数组,此时需要移动的元素已经到了数组的开始,其余元素在数组的后面reverse(nums, 0, numsSize - 1);// 第二次翻转:将第一次翻转到数组开始的k个元素翻转,这样就变成了正常的顺序reverse(nums, 0, k - 1);// 第三次翻转,将第一次翻转到数组后面的剩余元素翻转,这样也变成了正常的顺序reverse(nums, k, numsSize - 1);
}

十一【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. Python语言版
    在这里插入图片描述

  3. C语言版
    在这里插入图片描述


http://www.ppmy.cn/news/1551239.html

相关文章

随机变量的线性最小均方估计(LMMSE)——多个观测变量

假设有一个随机变量 x x x需要估计&#xff0c;线性最小均方误差&#xff08;Linear Minimum Mean Square Error, LMMSE&#xff09;估计的目标是找到一个线性估计器 x ^ ∑ i 0 N − 1 a i y i b \hat{x} \sum_{i0}^{N-1} a_i y_i b x^∑i0N−1​ai​yi​b&#xff0c;使…

怎样安装和启动Apache HTTP服务器(httpd)和PHP?

安装和启动Apache HTTP服务器&#xff08;httpd&#xff09;和PHP需要运行下面的程序&#xff1a; #&#xff01;/bin/bash yum install -y httpd php systemctl start httpd systemctl enable httpd 其中&#xff1a; #&#xff01;/bin/bash 表示使用Bash作为脚本的解释器。…

5.2.机器学习--岭回归+局部线性回归

目录 1.岭回归 1.1代码示例 2.局部线性回归 2.1代码示例 1.最小二乘法&#xff1a; 平面几何表达直线(两个系数): 重新命名变量: 强行加一个x01&#xff1a; 向量表达&#xff1a; 2.损失函数&#xff1a; 矩阵表达&#xff1a; 矩阵展开&#xff1a; 推导&#xff1a; …

普通单向有头链表,用于内存资源受限,不带mmu的单片机

#include <stdint.h> #include <stdbool.h> #include <stdio.h>#define NODE_COUNT 10 // 定义节点的总数量// 链表节点结构 typedef struct Node {int data; // 节点的数据struct Node* next; // 指向下一个节点的指针 } Node;// 全局节点数组和链…

聊一聊Elasticsearch的索引(2)

1、索引状态的管理 对索引状态的管理操作包括&#xff1a;清空缓存&#xff08;clear cache&#xff09;、刷新索引&#xff08;refresh index&#xff09;、冲洗索引&#xff08;refresh index&#xff09;、强制合并&#xff08;force merge&#xff09;、关闭索引&#xff…

php+Mysql单页支持不同数据结构不同查询条件查搜多表实例

phpMysql单页支持不同数据结构不同查询条件查搜多表实例 本来还要增加删 改 新增的&#xff0c;眼睛需要休息所以放弃后续制作(增删改代码已删或注释) 直接用可以用于自己多表查搜&#xff0c;界面还可以&#xff1b;有兴趣的可以自己二次开发成改删增 <?php function co…

java jvm部分命令 ~~还在完善中

命令整理 jps -q 只输出进程号 -m main 函数的参数 -l 主类全名 -v 输出jvm参数 jstat jstat -gc pid 1000 10 class gc gccapacity gcutil gccause gcnew gcnewcapacity gcold gcoldcapacity compiler printcompilation gcmetacapacity jinfo -sysprops pid -flags pid -flag…

# issue 7 TCP回声服务器和客户端

一、TCP/IP协议栈 为什么需要理解协议栈&#xff1f; 学习C/C就是要懂底层的原理。不然永远是“调包侠” 根据数据传输方式的不同&#xff0c;基于网络协议&#xff08;这里是指基于TCP/IP协议&#xff09;的套接字一般分为TCP 套接字和UDP 套接字。因为TCP 套接字是面向连接的…