数组循环左移问题,将一个N个元素的数组向左移i个位置
解法一:
先将数组前i个元素存在临时数组,在将余下的n-i个元素左移i个位置,最后将临时数组中的元素复制到后面i个位置
复杂度:
需移动i+(n-i)+i = i+n 次数组单元
需i个额外存储单元
解法二:
设计一个函数将数组向左移动一个位置,然后在调用函数i次
复杂度:
需移动i*n次数组单元
只需1个额外存储单元
解法三:
AB(A代表前i个元素,B代表后n-i个元素),先将A置换,在将B置换,最后将AB置换
AB -> A-1B -> A-1B-1 -> BA
算法如下:
#include <stdio.h>
void foreMove(int* a, int path, int n);
void reverse(int* a, int m, int n);
int main(void){int a[7] = {3,5,7,9,11,13,66};int i;foreMove(a, 5, 7);for(i=0; i<7; i++){printf("%d ",a[i]);}return 0;
}
void foreMove(int* a, int path, int n){reverse(a, 0, path-1);reverse(a, path, n-1);reverse(a, 0, n-1);
}
void reverse(int* a, int m, int n){int temp;while( m<n ){temp = *(a+m);*(a+m) = *(a+n);*(a+n) = temp;m++;n--;}
}
结果
复杂度:
需移动 i/2 + (n-i)/2 + n/2 = n 次数组单元
需1个临时交换存储单元
数组循环左移问题,将一个N个元素的数组向左移i个位置相关推荐
- c语言 数组循环移动,如何将一个数组的元素循环左移?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define SIZE(a) (sizeof(a)/sizeof(a[0])) #define HBIT(a) (( ...
- php利用数组循环输出,php数组遍历,php循环输出数组
php数组遍历,php循环输出数组,PHP数组循环遍历的四种方式 [(重点)数组循环遍历的四种方式] 1,https://www.cnblogs.com/waj6511988/p/6927208.ht ...
- 找出元素在数组中的位置
网上很常见的一个题目: 题目描述:找出元素 item 在给定数组 arr 中的位置. 输出描述:如果数组中存在item,则返回元素在数组中的位置,否则返回-1. 示例:输入{1,2,3,4},3 结果 ...
- js的tree数组对象扁平化思否_JS专题之数组展开
前言 首先什么是数组展开? 假如现在有这样一个需求:将后台的一个多重 List 数据,展开成一个 List 后,并去重后排序: ["a", "b", [&quo ...
- 算法 - 数组循环左移m个元素
题目 整数数组,n个元素 数组循环左移m个元素 [1,2,3,4,5,6,7,8,9] -> [4,5,6,7,8,9,1,2,3] 思路 数组整体逆转 [1,2,3,4,5,6,7,8,9] ...
- c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)
c语言自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数) 程序流程图: 代码: #include<stdio.h> char strupr(char ch[ ...
- c语言将数组元素循环右移k位,把一个含有N个元素的数组循环右移K位
普通解法: 可以每次将数组中的元素右移一位,循环K次.每个元素右移N位后都会回到自己的位置上.因此,如果K > N,右移K-N之后的数组序列跟右移K位的结果是一样的.进而可得出一条通用的规律:右 ...
- 长度为n的整数数组循环左移右移m位
长度为n的整数数组循环左移m位 右移m相当于左移n-m // pat.cpp : Defines the entry point for the console application. //#inc ...
- 编程将一个二维数组元素变换为逆向存放,即按元素在内存中的物理排列位置,第一个元素变成倒数第一个元素,第二个元素变成倒数第二个元素,依此类推。
编程将一个二维数组元素变换为逆向存放,即按元素在内存中的物理排列位置,第一个元素变成倒数第一个元素,第二个元素变成倒数第二个元素,依此类推. 例如,原始二维数组为,逆向存放后变为.试建立一个类 ...
最新文章
- memcache缓存服务器(nginx php memcache mysql)
- 企业网络推广专员浅析有利于企业网络推广的页面制作技巧有哪些?
- 用 FastJSON 将 JSON 字符串转换为 Map
- 从无到有整合SpringMVC-MyBatis项目(1):搭建JavaWeb项目
- Windows下SVN已检出项目自动更新
- 解析JDK 7的Garbage-First收集器
- weixin-java-tools工具-微信开发常见问题
- C++:Timer类实现
- js 小写金额转大写
- 找工作就来程序c#/.net开发求职招聘QQ群
- PO模式项目实战思路分析
- css小tips -- figcaption标签
- 技术总监经验总结: 从需求到上线之用户故事地图
- 【共阳极高辉度无频闪调光IC方案FP7125】耐压100V10A LED降压恒流PWM调光芯片 汽车大灯车灯照明/调光电源应用
- 9700 功耗测试软件,基准性能测试 - 酷睿i9-9900K/i7-9700K同步评测:八核的时代来了 - 超能网...
- CS61A Lab 4
- 结电场已经是光入射之前内部各种因素平衡所致的。凭什么说光生载流子是结电场推过去的?好像光生载流子只受结电场作用似的。提出动能假设 ?网友的相同疑问
- java 简单万年历_Java_万年历(简单)
- 联发科MT7682芯片资料MT7682处理器资料整理
- 782 变为棋盘——Leetcode天天刷(2022.8.23)【数学:降维计算】