首页 > 编程语言 >算法设计2——数组元素循环右移

算法设计2——数组元素循环右移

时间:2024-11-05 11:45:51浏览次数:4  
标签:右移 end int 反转 复杂度 元素 算法 数组

问题描述:

有一个数组 a 包含 n (n>1) 个整数元素,设计一个尽可能高效的算法将数组 a 中的后面k个元素循环右移(k<=n),其中n是数组长度,0<=k<=n。

例如:a = (1,2,3,4,5),k=3,

结果:a = (3,4,5,1,2)


思路:
  1. 理解问题:将数组 a 中的最后 k 个元素移动到数组的前面,同时保持剩余元素的顺序不变。
  2. 解决问题:通过过三次反转数组的子部分解决:
  • 先反转整个数组,[1,2,3,4,5] ——> [ 5,4,3,2,1 ]
  • 然后反转整个数组的前 k 个元素,——>[ 3,4,5,2,1 ]
  • 最后反转数组最后的 n-k 个元素。——>[ 3,4,5,1,2 ]
public static void rotateRight(int[] a, int k) {
        int n = a.length;
        k = k % n; // 处理k大于n的情况
        reverse(a, 0, n - 1); // 反转整个数组
        reverse(a, 0, n-k); // 反转数组的前k个元素
        reverse(a, k, n - 1); // 反转数组的剩余n-k个元素
}

private static void reverse(int[] a, int start, int end) {
    while (start < end) {
        int temp = a[start];
        a[start] = a[end];
        a[end] = temp;
        start++;
        end--;
    }
}

时间复杂度:每次反转操作的时间复杂度是 O(n),执行了三次反转操作,所以总的时间复杂度是 O(n)。
空间复杂度:这个算法是原地操作,不需要额外的存储空间,所以空间复杂度是 O(1)。


调用:
public static void main(String[] args) {
        int[] a = {1, 2, 3, 4, 5}; // 示例数组
        int k = 3; // 需要右移的元素数量
        rotateRight(a, k); // 调用函数进行数组右移

        // 打印结果
        System.out.print("Rotated array: ");
        for (int value : a) {
            System.out.print(value + " ");
        }
    }

标签:右移,end,int,反转,复杂度,元素,算法,数组
From: https://blog.csdn.net/weixin_74622880/article/details/143504130

相关文章

  • 人脸检测之MTCNN算法网络结构
    MTCNN(Multi-taskCascadedConvolutionalNetworks)是一种用于人脸检测和关键点检测的深度学习模型,特别适合在复杂背景下识别出多尺度的人脸。它通过多任务学习来实现人脸检测和人脸关键点定位(如眼睛、鼻子、嘴巴的位置),实现高精度的人脸区域定位和关键点提取。MTCNN主要由三个......
  • (58)LMS自适应滤波算法与系统辨识的MATLAB仿真
    文章目录前言一、LMS算法的基本步骤二、LMS算法的一些主要应用1.通信系统2.信号分离与增强3.控制系统4.生物医学信号处理5.机器学习与模式识别6.其他应用三、LMS算法用于系统辨识的MATLAB仿真四、仿真结果前言LMS(LeastMeanSquares,最小均方)算法是一种广泛使......
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
    计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01目录文章目录计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01目录1.APerspectiveforAdaptingGeneralistAItoSpecializedMedicalAIApplicationsandTheirChallenges2.S......
  • python 实现灰色模型神经网络拟合算法
    灰色模型神经网络拟合算法介绍灰色模型神经网络拟合算法结合了灰色预测模型和神经网络的优势,用于处理样本数据量较少、信息不完全或具有不确定性的系统预测问题。以下是对该算法及其原理的详细介绍:一、灰色预测模型(GrayForecastModel)灰色预测是对既含有已知信息又含有......
  • python 实现蚁群算法
    蚁群算法介绍蚁群算法(AntColonyOptimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。这种算法由MarcoDorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。基本原理蚂蚁在运动过程中会留下一种称为信息素的化学物......
  • 基于django框架开发在线书店推荐系统 python实现个性化网上书店/图书购物商城推荐网站
    基于django框架开发在线书店推荐系统python实现个性化网上书店/图书购物商城推荐网站爬虫、兴趣标签、排行榜标签推荐、热点推荐、协同过滤算法推荐大数据深度学习机器学习人工智能WebBookShopRecPy一、项目简介1、开发工具和使用技术Pycharm、Python3及以上版本,D......
  • 基于django框架开发在线美食推荐系统 python实现个性化美食食谱推荐系统 爬虫、排行榜
    基于django框架开发在线美食推荐系统python实现个性化美食食谱推荐系统爬虫、排行榜、可视化数据分析基于流行度热点推荐、基于用户/物品协同过滤算法推荐、平均加权混合推荐大数据深度学习机器学习OnlineFoodRecommendPy一、项目简介1、开发工具和使用技术Pycharm......
  • c语言中三维数组
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c#include<stdio.h>intmain(void){doubletensu[2][4][3]={{{3,4,2},{2,4,4},{2,4,3},{1,5,8}},{{4,4,2},{2,8,4},{2,8,9},{1,8,5}}};inti,j,k;for(i=0;i<2;......
  • 算法笔记:Day-09(初始动态规划)
    509.斐波那契数斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>1给定n,请计算F(n)。示例1:输入:n=2输出:1解释:F(2)=F(1)......
  • 算法笔记-Day09(字符篇)
    151.反转字符串中的单词classSolution{publicStringreverseWords(Strings){intlen=s.length(),count=0;StringBuffertemp=newStringBuffer();StringBufferans=newStringBuffer();for(inti=0;i<len;i++){......