首页 > 其他分享 >旋转数组

旋转数组

时间:2023-06-20 11:07:18浏览次数:31  
标签:numsSize fabs nums int 旋转 数组 字符串


题:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

1.示例 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.算法思路:
一般人拿到这道题大概会使用一个中间值来一点一点一次一次的旋转,但是 这道题我却用了一个不一样的思路:先将两个由旋转长度分开的部分各自颠倒,再将整个字符串颠倒则可得到旋转后的字符串;

3.代码实现:

void rotate(int* nums, int numsSize, int k)
{
	int i, z;
    k = fabs(k % numsSize);//转过一周就等于没转,因此对其求余
	for (i = 0; i < fabs((numsSize - k) / 2); i++)//fabs为字符串长度小于旋转长度
	{
		z = nums[i];
		nums[i] = nums[numsSize - k - 1 - i];
		nums[numsSize - k - 1 - i] = z;
	}
	for (i = 0;i<fabs(k/2); i++)
	{
		z = nums[numsSize - k + i];
		nums[numsSize - k + i] = nums[numsSize - 1 - i];
		nums[numsSize - 1 - i] = z;
	}
	for (i = 0; i < fabs(numsSize / 2); i++)
	{
		z = nums[i];
		nums[i] = nums[numsSize - 1 - i];
		nums[numsSize - 1 - i] = z;
	}
}


标签:numsSize,fabs,nums,int,旋转,数组,字符串
From: https://blog.51cto.com/u_16165815/6521241

相关文章

  • JavaScript判断两个数组相等的四类方法
    在JavaScript中,数组本质上是一种特殊的对象,它的类型值会返回object。如果我们需要比较两个数组是否相等,不能像比较基本类型(String、Number、Boolean等)一样,使用===(或==)来判断,所以如果要比较数组是否相等,需要使用一些特殊方法。关于JS类型的判断,可见博文typeof详解。本文......
  • 搜索旋转排序数组
    33.搜索旋转排序数组题目描述题解为了设计一个复杂度为\(O(logn)\)的算法,可以采用二分的思想,但是题给数组只是一个部分有序的数组,更准确一点,应该是两个有序数组拼接而成的部分有序数组,唯一出现乱序的地方就是两个数组的拼接处。为了使用二分查找算法,我们必须确定中位点mid位......
  • 截取某列数组元素里的一部分成为一个新列数组
    参考: https://www.coder.work/article/3220624  spark2.4的新方法Spark2.4引入了新的SQL函数 slice,可用于从数组列中提取一定范围的元素。 ......
  • 189. 轮转数组
    题目:思路:【1】如果采用辅助空间(这种是最简单的,因为需要遍历一遍,然后放入指定位置)【2】对于进阶的处理,即只用空间复杂度为O(1)【2.1】利用环的思维其实这里需要理解一个比较绕的逻辑就是从X位置开始循环,到回到X位置到底遍历了多少个元素已知数组的元素个数是n,偏移量为k(这......
  • 数组的动态内存分配
     假设我们要为一个字符数组(一个有20个字符的字符串)分配内存,我们可以使用上面实例中的语法来为数组动态地分配内存,如下所示:char*pvalue=NULL;//初始化为null的指针pvalue=newchar[20];//为变量请求内存要删除我们刚才创建的数组,语句如下:delete[]pvalue;//......
  • js数组常用的方法
    在JavaScript中,数组是一种非常重要的数据类型。数组提供了一系列常用的方法,可以方便地对数组进行操作和处理。本文将介绍JavaScript中几种常用的数组方法的含义、返回值以及是否改变原数组。一、push()push()方法可以将一个或多个元素添加到数组的末尾,并返回数组的新长度。例如:......
  • 旋转字符串
    给定两个字符串,s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的旋转操作就是将 s最左边的字符移动到最右边。 例如,若 s='abcde',在旋转一次之后结果就是'bcdea' 。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/rotate-strin......
  • 2023-06-18:给定一个长度为N的一维数组scores, 代表0~N-1号员工的初始得分, scores[i] =
    2023-06-18:给定一个长度为N的一维数组scores,代表0~N-1号员工的初始得分,scores[i]=a,表示i号员工一开始得分是a,给定一个长度为M的二维数组operations,operations[i]={a,b,c}。表示第i号操作为:如果a==1,表示将目前分数<b的所有员工,分数改成b,c这个值无用,如果a==2,表示将......
  • 微信小程序更改刷新data 数组结构里的某一项数据
    如果每次setData 中list整个数组,感觉会消耗性能,所以只需要setData刷新对应的item  只需要通过以下方式解决    this.setData({'array[0].text':'updatedata'})//如果索引是动态的则使用下方方式varmMessage='array['+index+'].text';this.set......
  • 【numpy基础】--数组简介
    NumPy(NumericalPython)是一个Python库,主要用于高效地处理多维数组和矩阵计算。它是科学计算领域中使用最广泛的一个库。在NumPy中,数组是最核心的概念,用于存储和操作数据。NumPy数组是一种多维数组对象,可以存储相同类型的元素,它支持高效的数学运算和线性代数操作。1.数据类型n......