旋转数组

  • 前言
    • 1.什么是旋转数组
    • 2.环状替换
    • 3.LeetCode题目
    • 4.解法
    • 5.代码实现
  • 总结

前言

1.什么是旋转数组

旋转数组分为左旋转和右旋转两类,力扣 189 题为右旋转的情况,今日分享的为左旋转。

给定一个数组,将数组中的元素向左旋转 k 个位置,其中 k 是非负数。

2.环状替换

环状替换比较难理解。如果把数组的数据放在正多边形上,以走跳棋的思路替换数据,画个图就好理解了。

假如 n=5, k=2, 数字1-5依次放在五边形顶点,数字替换的轨迹是1-3-5-2-4-1,回到原点,count = n, 结束。轨迹画出来刚好是个五角星。

假如 n=6, k=2, 数字1-6依次放在六边形顶点,数字替换的轨迹是1-3-5-1,回到原点了,count < n, start++, 接着 2-4-6-2,回到原点,count = n, 结束。轨迹是六边形的2个内嵌正三角形。

其它多边形类似,隔k个点往前走,总能走回原点,如果中间有漏的,旋转一个角的方位重复进行上述步骤就能走完所有的顶点了。

3.LeetCode题目

给你一个数组,将数组中的元素向右轮转 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]

4.解法

我们用下面的例子更具体地说明这个过程:

nums = [1, 2, 3, 4, 5, 6]
k = 2

5.代码实现

leetcode超时,但是思路对,删除最后一个,把最后删除的那个元素添加到数组的最前面

     <script>for (var i = 0; i < k; i++) {var p = nums.pop();nums.unshift(p);}return nums;</script>

这个是又更改算法了

  <script>var rotate = function(nums, k) {if (k > 0) {var arr = [];for (var i = 0; i < nums.length; i++) {arr[i] = nums[i];}for (var i = 0; i < nums.length; i++) {nums[(i + k) % arr.length] = arr[i];}return nums;}}console.log(rotate([1, 2, 3, 4, 5, 6, 7], 3));</script>

总结

思路还是很多,翻转数组还是增加数组或者删除数组都可以做到

JavaScript旋转数组相关推荐

  1. 《剑指offer》— JavaScript(6)旋转数组的最小数字

    旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2, ...

  2. 剑指offer:面试题11. 旋转数组的最小数字

    题目:旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2, ...

  3. 剑指offer_第6题_旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

  4. 数组元素替换_LeetCode 题解 | 189. 旋转数组

    力扣 189. 旋转数组(点击查看题目) 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 示例 2: 说明: 尽可能想出更多的解决方案,至少有三种不同的方 ...

  5. 剑指offer:旋转数组的最小数字

    题目 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的 ...

  6. 深入理解JavaScript类数组

    起因 写这篇博客的起因,是我在知乎上回答一个问题时,说自己在学前端时把<JavaScript高级程序设计>看了好几遍. 于是在评论区中,出现了如下的对话: 天啦噜,这话说的,宝宝感觉到的, ...

  7. 输出一个为递增排序数组的旋转数组中的最小元素——8

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为数组{1, 2,3, 4, 5}的一个旋转, ...

  8. 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java

    <LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...

  9. 【剑指offer-Java版】08旋转数组的最小数字

    旋转数组最小数字:暴力方法就是遍历-有效的方法是二分,但是存在失效的情况 几个特别的测试用例需要注意下: 数组中含有多个相同的数字 最小数字就是第一个 public class _Q08 {publi ...

最新文章

  1. Linux内核跟踪之trace框架分析【转】
  2. 【Zookeeper】源码分析之Leader选举(一)
  3. 关于Visual Studio 2010与64位系统的问题
  4. Echarts五步法加初体验
  5. caany边缘检测matlab,自适应canny算法研究及其在图像边缘检测中的应用.pdf
  6. c mysql linux,linux上C语言连接mysql
  7. 找不到好看的电影就看《IMDB排名前500电影》
  8. 时尚圈美女撰文主攻方向
  9. c语言获取随机数硬币问题,算法 – 从硬币中创建一个随机数生成器
  10. TCP非持久连接、持久性连接(流水线方式、非流水线方式)例题
  11. 分享一些程序员必备网站
  12. 任天堂switch lite和switch区别
  13. 【ros】初学ROS的学习笔记——创建Publisher
  14. 今天没有收到农行的笔试通知
  15. 新网科普:网站备案成功后,为什么还会被注销?
  16. OE分布式智能云生态助力全民挖矿
  17. Python查询12306车票和使用selenium进行买票
  18. 如何在PADS里加入封装库
  19. IC失效分析芯片测试
  20. java分布式库存系统_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...

热门文章

  1. 华为 PIM-SM RP选举与切换
  2. IntellIJ IDEA导入项目后无法运行方法的解决方法!
  3. 计算机默认存储格式,表格默认保存为et格式
  4. python黑色星期五_Python数据分析:亚马逊黑色星期五
  5. MySQL性能调优与设计——MySQL中的索引
  6. postgresql和postgrest安装及使用
  7. DeeplabV3+训练数据集流程(学习记录)
  8. 爬虫学习,尝试爬取小说网站
  9. 苹果CEO史蒂夫·乔布斯(Steve Jobs),2005年,斯坦福大学
  10. 卡尔曼滤波(kalman)