首页 > 其他分享 >c语言 数据结构,把数据整体循环左(右)移p个位置

c语言 数据结构,把数据整体循环左(右)移p个位置

时间:2024-05-10 17:04:53浏览次数:14  
标签:arr 语言 int 复杂度 看成 集合 数据结构 循环 BA

思路:n为数组的长度(利用线性代数的思路)

1.左移:把第1到第p个看成集合A,把第p+1到第n个看成集合B,则需要推导AB->BA, 过程(A-1)*(B-1)-> ( (A-1)*(B-1))-1 = BA

2.右移:把第1到第n-p个看成集合A,把第n-p+1到第n个看成集合B,则需要推导AB->BA, 过程(A-1)*(B-1)-> ( (A-1)*(B-1))-1 = BA

 

时间复杂度:O(n) , 空间复杂度O(1)

 

代码:

#include <stdio.h>


// 在arr数组的n到m的位置数据进行倒置 
void reverse(int * arr, int n, int m) {
    if (n >= m) {
        return;
    } 
    int mid = n + (m - n) / 2;
    int cnt = m - n;
    for (int i = n; i <= mid; i++) {
        int num = arr[i];
        arr[i] = arr[m - (i-n)];
        arr[m - (i-n)] = num;
    }
}

int main() {
    int p;
    while(~scanf("%d", &p)) {
        int arr[] = {1,2,3,4,5,6}; 
        int len = (sizeof(arr) / 4);
        // 取余,防止超出数组长度 
        p = p % len;
        
        // printf("p %d\n", p);
        // 开始循环移动 (向右)
        reverse(arr, 0, len-1-p);
        reverse(arr, len-p, len - 1);
        
        // 开始循环移动 (向左)
        //reverse(arr, 0, p-1);
        //reverse(arr, p, len - 1);
        
        reverse(arr, 0, len - 1);
        //printf("\n");
        // 打印
        for(int l = 0; l < len; l++) {
            printf("%d ",  arr[l]);
        }
        printf("\n");
    }
    
    return 0;
} 

 

标签:arr,语言,int,复杂度,看成,集合,数据结构,循环,BA
From: https://www.cnblogs.com/hello-dummy/p/18184814

相关文章

  • WIN10的BUG:语言栏快捷键重启丢失的问题(解决笔记)
    这个问题据说已存在多年,但一直没有解决:crtl+shift+del导致切换语言的热键丢失-MicrosoftCommunity经过下文的引导,发现真存在这个可能性,参照下文的方法解决W10修改输入法快捷键及快捷键BUG解决-知乎(zhihu.com)在我的电脑中是这样设置的:而这个“美式键盘”的快捷方式每次......
  • 大语言模型中的特殊Token作用
    在我深入研究大型语言模型时,我意识到特殊Token不仅仅是数据元素,它们在模型中扮演着关键角色,帮助理解和处理语言结构。举个例子,BERT的CLS标记帮助模型把握整个句子的含义,MemoryTransformer的记忆Token则让模型能持续跟踪对话的上下文,而Meta最近提出的RegisterToken为处理视觉任务......
  • 【C语言】---- sizeof关键字计算变量的大小
    简介sizeof是C语言中一个非常重要的关键字,它用于计算变量、类型和数组的大小。sizeof的作用是获取变量或数据类型在内存中所占用的字节数。在C语言中,所有的数据都有一个确定的大小,这个大小取决于数据类型。例如,一个int类型的数据在大多数系统中占用4个字节,而一个char......
  • c语言 复杂度为O(n)的有序数字字符的去重
     #include<stdio.h>intmain(){//有序列表的去重intarr[]={1,2,2,3,3,3,5,6,7,7,7,7,8,8,9,9,9};intlen=sizeof(arr)/4;intmark[len]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};intk=0;//打印数组printf("原始数组:")......
  • 【C语言】---- 三目运算符
    C语言中的三目运算符是一种简化版的条件语句,它允许您在一行代码中编写ifelse语句。三目运算符的语法如下:condition?expression1:expression2;如果condition为真,则表达式expression1被求值并作为整个表达式的结果;如果condition为假,则表达式expression2被求值并作为整个表达......
  • 线性同余-常见语言编译器参数
    Sourcem(multiplier) a   (increment) coutputbitsofseedin rand() /Random(L)NumericalRecipes23216645251013904223 Borland C/C++232226954771bits30..16in rand(),30..0inlrand()glibc (usedby GCC)[5]231110351524512345b......
  • 循环经典案例-买汽水
    一、题目: 二、递归方式实现:2.1.实现思路解析:先用笔写出花1元可以得到1瓶汽水,花2元可以得到5瓶汽水,花3元可以得到11瓶汽水,花4元可以得到17瓶汽水,花5元可以得到23瓶汽水,发现规律:花1块钱可买到1瓶汽水不符合通用规则,花2块钱可得到5瓶汽水不符合通用规则,花3块钱可得到11瓶......
  • Go语言:统计字符串相关的函数
    统计字符串相关的函数:(1)统计字符串的长度,按字节进行统计(注意:UTF-8编码是Go语言默认的字符编码,汉字通常占用3个字节。)len(str)备注:因为len是Go语言的内置函数,所以不需要导包,直接使用就可以了。 (2)字符串遍历方式一:利用键值循环:for-rangefori,value:=rangestr{f......
  • linuxC语言点灯
    大部分情况下都是使用C语言去编写的。只是在开始部分用汇编来初始化一下C语言环境,比如初始化DDR、设置堆栈指针SP等等,当这些工作都做完以后就可以进入C语言环境,也就是运行C语言代码,一般都是进入main函数。所以我们有两部分文件要做:①、汇编文件汇编文件只是用来完......
  • Spring 中 bean 的循环依赖
    什么是循环依赖A直接或间接依赖B的同时B又间接或直接依赖A,此时我们可以称A和B之间存在循环依赖关系。在使用Spring的过程中应该尽量避免循环引用关系的出现。生命周期简述在阅读下面的样例之前,需要先了解一下Spring中bean的生命周期,简单来说bean的生命周期分......