旋转数组

算法篇—旋转数组与旋转链表 文章目录1.旋转数组2.旋转链表 1.旋转数组 a.思路 🔶将k%numsSize等效为m。 🔶将区间[numsSize-m,numsSize-1]进行翻转,再将区间[0,numsSize-m-1] 进行翻转。然后数组整体进行翻转。 b.图解 c.代码 2.旋转链表 a.思路 🔶计算节点个数,nodesize。 🔶将k%nodesize等效成m。 🔶通过快慢指针,使slow指向倒数第m个节点。 🔶将slow以后的链表进行翻转,将slow以前的链表进行翻转,然后整体翻转 b.图解 c.代码 今天的 阅读详情
原题:

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

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

一刷(c):
方法一:

每次都把最后一个元素取出,前面元素往后移,循环k次。

void rotate(int* nums, int numsSize, int k) {
    int temp=0;

    for(int i=0;i<k;i++){
        temp=nums[numsSize-1];
        for(int j=numsSize-2;j>=0;j--){
            nums[j+1]=nums[j];
        }
        nums[0]=temp;
    }
}


方法二:

参考了大佬做法,先反转前n-k个元素,再反转后k个元素,在全部反转,但应注意numsSize

void re(int* nums, int start ,int end){

    while(start<end){
        int temp=nums[start];
        nums[start++]=nums[end];
        nums[end--]=temp;
    }
}

void rotate(int* nums, int numsSize, int k) {

    if(numsSize<k){
        k=k%numsSize;
    re(nums,0,numsSize-k-1);
    re(nums,numsSize-k,numsSize-1);
    re(nums,0,numsSize-1);
    }else{

    re(nums,0,numsSize-k-1);
    re(nums,numsSize-k,numsSize-1);
    re(nums,0,numsSize-1);
    }

}
方法三:

利用(i+k)%numsSize从第一个开始确定该元素旋转后的位置,直到所有元素归位。

public void rotate2(int[] nums, int k) {
    if (nums.length == 0 || (k %= nums.length) == 0) {
        return;
    }
    int length = nums.length;
    int start = 0;
    int i = 0;
    int cur = nums[i];
    int cnt = 0;

    while (cnt++ < length) {
        i = (i + k) % length;
        int t = nums[i];
        nums[i] = cur;
        if (i == start) {
            ++start;
            ++i;
            cur = nums[i];
        } else {
            cur = t;
        }
    }
}


一刷(Java):

方法一:

class Solution {
    public void rotate(int[] nums, int k) {
        int temp=0;
        for(int i=0;i<k;i++){
           temp= nums[nums.length-1];
            for(int j=nums.length-2;j>=0;j--){
                nums[j+1]=nums[j];
            }
            nums[0]=temp;
        }
    }
}


BB一句:

方法二 和方法三都感觉比较巧妙,方法二的反转函数有意思,记下。

算法总结之旋转数组 旋转数组 定义 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。 方法1:转为有序数组 寻找旋 阅读详情

相关推荐

二维数组旋转

java int a[][]={{1,2,3},{4,5,6}}; //定义3*3数组演示 int c[][]=new int[2][3]; for(int i=0;i<2;i++) { for(int j=0;j<3;j++) { c[i][j]=...

jacke121的专栏 3615

对数组进行指定位置的翻转

/* * 对char数组从start到end位置进行翻转 */ void reverse(char[] str,int start,int end){ char temp; while(start<end){ temp = str[start]; str[start++] = str[end]; str[end--] = temp; } }

code to success 1599

WRF进阶:定制Vtable文件解析非标准气象数据源——以ERA5-Land土壤湿度为例

本文详细介绍了如何为WRF模式定制Vtable文件,以解析非标准气象数据源ERA5-Land的土壤湿度数据。通过剖析GRIB文件结构、详解Vtable编写逻辑与语法,并提供了从数据验证到metgrid配置的完整实战流程,帮助用户突破标准数据源限制,实现高精度陆面过程模拟。

o4p5q6r7s的博客 393

189. Rotate Array(指定位置旋转数组)

problems: Given an array, rotate the array to the right by k steps, where k is non-negative. Example 1: Input: [1,2,3,4,5,6,7] and k = 3 Output: [5,6,7,1,2,3,4] Explanation: rotate 1 steps to the righ...

Hcaroline 177

【故障处理】- ORA-01722

在执行升级脚本@?/rdbms/admin/catupgrd.sql时报错ora-01722。

weixin_39099660的博客 855

实测iOS和安卓大不同!用NFC触发小程序跳转的完整避坑指南(含NFC Tools配置)

本文深入解析iOS与安卓在NFC触发小程序跳转时的核心差异,提供微信与支付宝小程序的NFC实现方案及优化技巧。涵盖跨平台兼容性测试方法论、性能优化策略及异常处理方案,帮助开发者避开常见陷阱,提升跳转成功率。特别针对NFC Tools配置和微信Universal Link使用进行详细指导。

asdfghjkl978564的博客 436

编程珠玑旋转数组

编程珠玑第二章 左旋数组i个长度 空间复杂度为常数 #include "head.h" //这个方法不对,左边i到右边之后可能会乱序 class Solution{ public: void rotate_i(vector&lt;int&gt; &amp;vec, int i) { int t = 0; for (int j=0;j&lt;...

pynash123的博客 254

针对中文CLIP模型训练失效的解决方案记录

解决了中文CLIP模型无法正确训练的问题

weixin_45906434的博客 1622

Leetcode旋转数组——旋转与搜索

文章目录引入旋转数组题解搜索旋转数组题解 引入 这次遇到的题目如下: 189.旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 以及我将额外介绍旋转后的搜索方法: 33.搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,...

No_Game_No_Life_的博客 354

海康/大华设备如何接入GB28181平台?最新2022版互联避坑指南

本文详细解析了海康/大华设备接入GB28181平台的最新2022版互联避坑指南,涵盖参数配置、实时视音频点播协议交互及典型故障排查。重点介绍了GB/T28181-2022标准下的设备编码规范、SIP服务器配置及媒体流保活机制,帮助工程团队高效解决设备离线和媒体流中断等问题。

weixin_30733003的博客 688

UFS 3.1协议分析(第一至四章) -- UFS概述

Contents协议规范规范参考术语和定义简单概述通用特性接口特性功能特性 协议规范     UFS3.1协议规定了UFS电气接口和存储器件的特性以及系统架构。 特性:低功耗、高数据吞吐量、低电磁干扰、大容量存储器子系统效率的优化 电气接口:使用基于MIPI M-PHY的高级差分接口;M-PHY作为物理层,MIPI UniPro作为链路层,二者结合形成UFS接口的互联。 架构模型:参考 INCITS T10(SCSI) SAM 标准,命令协议基于 INCITS T1

Frank_sample的专栏 1万+

数组旋转的3种方法

文章目录方法 1(使用临时数组)方法 2(逐一旋转)方法 3(杂耍算法)参考文档     编写一个函数 rotate(ar[], d, n) ,将大小为 n 的数组 arr[] 旋转 d 个元素。     将上述数组旋转2个元素,将生成数组: 方法 1(使用临时数组)     输入 arr[] = [1, 2, 3, 4, 5, 6, 7], d = 2, n =7 将 d 元素存储到临时数组 temp temp[] = [1, 2] 移动 arr[] 的其余部分 arr[] = [3, 4, 5,

运维狗的备忘录 1561

告别‘Duang’的一声:手把手解决RK3588开发板PCIe初始化卡死问题(DTS修改实战)

本文详细介绍了解决RK3588开发板PCIe初始化卡死问题的完整过程,包括问题诊断、DTS文件修改及编译烧写步骤。通过禁用未使用的PCIe硬件资源,有效解决了启动卡死问题,为嵌入式开发者提供了实用的调试方法和经验总结。

weixin_30753873的博客 217

旋转数组总结篇

旋转数组总结篇

❀雾里看花花里看雾❀ 1045

使用R语言获取泊松回归模型的事件密度比(Incidence Rate Ratio,IRR)的95%置信区间

在泊松回归模型中,我们通常关注的是自变量对事件发生率的影响,而事件密度比(Incidence Rate Ratio,IRR)可以帮助我们理解不同自变量对事件发生率的相对影响。在本文中,我们将使用R语言来获取泊松回归模型所有系数的事件密度比的95%置信区间。通过以上步骤,我们可以使用R语言获取泊松回归模型所有系数的事件密度比的95%置信区间。为了获取事件密度比的置信区间,我们将使用。使用R语言获取泊松回归模型的事件密度比(Incidence Rate Ratio,IRR)的95%置信区间。

BugCrusher的博客 1264

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JavaScript旋转数组

旋转数组前言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,

Anwar的博客 5414

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

旋转数组类的题目

题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 题目来源:剑指offer 解决代码: class Solution { public: in...

nbawj的博客 232

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

旋转数组的几种做法

旋转数组的几种方法

adcxhw的博客 1615

JS之数组旋转

**题目:** 给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。 输入:[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] 旋转数组实际上就是把数组的数字向后旋转k位,末位的数字自动填充到前面的位置。

M_Jin的博客 1721

搜索旋转数组

搜索旋转数组

青釉Oo的博客 1597

搜索旋转排序数组

优质博文。

程序猿进阶 1109
上一篇: 删除排序数组中的重复项
下一篇: 存在重复
coder_flag
博客等级 码龄9年 2粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值