当前位置: 首页 > article >正文

js.轮转数组和旋转链表

这是两个相似的题型,一个是数组,另一个是链表。

链接:189. 轮转数组 - 力扣(LeetCode)

题目:

给定一个整数数组 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 <= nums.length <= 105
  • -231 <= nums[i] <= 231 - 1
  • 0 <= k <= 105

思路:

首先分为两种情况来写,

1  数组长度比k大,先取出数组的后k个值复制到新的数组。让第nums.length-1-i的值,等于它的第前k的值。再将新数组的值赋值到nums的前k个值。

2  长度比k小,反复让k减去数组长度,直到数组长度大于k。

代码:

/**

 * @param {number[]} nums

 * @param {number} k

 * @return {void} Do not return anything, modify nums in-place instead.

 */

var rotate = function(nums, k) {

    while(nums.length<=k) {

        k -= nums.length

    }

    let newarr = nums.slice(nums.length-k,nums.length)

    for(let i = nums.length-1 ; i >= k ; i-- ){

        nums[i] = nums[i-k]

    }

    while(k){

        nums[k-1] = newarr[k-1]

        k--

    }

};

第二题:

链接:61. 旋转链表 - 力扣(LeetCode)

题目:

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

示例 2:

输入:head = [0,1,2], k = 4
输出:[2,0,1]

提示:

  • 链表中节点的数目在范围 [0, 500] 内
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 109

代码:

/**

 * Definition for singly-linked list.

 * function ListNode(val, next) {

 *     this.val = (val===undefined ? 0 : val)

 *     this.next = (next===undefined ? null : next)

 * }

 */

/**

 * @param {ListNode} head

 * @param {number} k

 * @return {ListNode}

 */

var rotateRight = function(head, k) {

    let sum = 0 , l = last = head

    while(l){

        sum++

        if(l.next==null) last = l

        l = l.next

    }

    while(k>=sum&&k&&sum){

        k-=sum

    }

    if(k==0||!head) return head

    l = head

    let num = sum - k , q = l

    while(num--){

        if(num==0){

            q = l

            l = l.next

            q.next = null

        }else{

        l = l.next

        }

    }

    last.next = head

    return l

};


http://www.kler.cn/a/380138.html

相关文章:

  • 基于 RNN 的语言模型
  • 「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用
  • 服务器作业(2)
  • 信息学科平台设计与实现:Spring Boot技术详解
  • 跨平台使用高德地图服务
  • PHP文件包含漏洞
  • linux shell脚本学习(1):shell脚本基本概念与操作
  • 递归的相关知识(Java)全面版
  • JavaEE初阶---网络原理之TCP篇(二)
  • [VUE]框架网页开发1 本地开发环境安装
  • 北斗有源终端|智能5G单北斗终端|单兵|单北斗|手持机
  • LINUX_Ubuntu终端安装tools的命令
  • 详解Rust标准库:HashMap
  • k8s和docker常用命令笔记
  • 设计模式小结一策略(strategy)模式
  • 【测试工具】Fastbot 客户端稳定性测试
  • (微服务)服务治理:几种开源限流算法库/应用软件介绍和使用
  • 【数据结构】插入排序和希尔排序
  • PropTypes 和 TypeScript 在 React 中的比较
  • 深度学习每周学习总结J4(ResDenseNet 算法探索实践 - 鸟类识别)
  • 欠定方程有多个真正解,超定方程可能无解所以有最小二乘解
  • 鸿蒙HarmonyOS开发:给应用添加基础类型通知和进度条类型通知(API 12)
  • SpringBoot技术:打造新闻稿件管理平台
  • Timing修复的几种方法之setup
  • Django--models.py
  • 24/11/4 算法笔记 蛇形卷积