博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】189. 旋转数组
阅读量:5739 次
发布时间:2019-06-18

本文共 1243 字,大约阅读时间需要 4 分钟。

题目描述

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

解法

解题思路1

将数组分为两部分,分别对左右两部分做翻转,最后对总数组做翻转。

代码

/** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */var rotate = function(nums, k) {    if(k <= 0 || nums.length <=0 ){        return ;    }    var kk = k % nums.length;    var p = nums.length - kk ;    my_reverse(nums,0,p);    my_reverse(nums,p,nums.length);    my_reverse(nums,0,nums.length);};function my_reverse(num, start, end){    end -= 1;    var tmp = num[start];    while(start <  end){        var tmp = num[start];        num[start] = num[end];        num[end] = tmp;        start++;        end--;    }}

O(1)解法

JavaScript实现

循环右移

/** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */var rotate = function(nums, k) {    //nums =  nums.slice(nums.length-k).concat(nums.slice(0,k+1));    //console.log(nums);    while(k>0){          nums.unshift(nums.pop());          k--;    }};

转载地址:http://rafzx.baihongyu.com/

你可能感兴趣的文章
详解U盘WINPE下安装xp系统的关键
查看>>
【贪心】bzoj3850 ZCC Loves Codefires
查看>>
django找不到报错 ‘zsh: command not found: django-admin.py’
查看>>
Jenkins 的插件AnsiColor 多颜色
查看>>
Hibernate环境搭建
查看>>
win7中竟然没有telnet.exe??
查看>>
mysql workbench中PK,NN,UQ,BIN,UN,ZF,AI字段类型标识说明
查看>>
Create New Commands in Tcl
查看>>
OpenCASCADE Make Primitives-Box
查看>>
解析几何求交之直线与二次曲面
查看>>
实验二
查看>>
Codeforces Round #420 (Div. 2)
查看>>
AtCoder Grand Contest 022
查看>>
20172318 2018-2019-1 《程序设计与数据结构》第6周学习总结
查看>>
Mysql数据库操作常用命令
查看>>
PHP工厂模式 设计模式
查看>>
Codetest3
查看>>
R升级和包更新
查看>>
andriod第三课------Intent、后台服务与线程
查看>>
理解Java对象序列化
查看>>