微信网站开发流程图,建设手机银行app下载安装最新版,茂名网站设计,seo顾问价格旋转数组OJ链接#xff1a;https://leetcode-cn.com/problems/rotate-array/ 题目#xff1a; 思路#xff1a; 通过题目我们可以知道这是一个无序数组#xff0c;只需要将数组中的数按给定条件重新排列#xff0c;因此我们可以想到以下几种方法#xff1a;
1.暴力求解法…旋转数组OJ链接https://leetcode-cn.com/problems/rotate-array/ 题目 思路 通过题目我们可以知道这是一个无序数组只需要将数组中的数按给定条件重新排列因此我们可以想到以下几种方法
1.暴力求解法旋转k次 时间复杂度O(N^2)
空间复杂度O(1) 2.空间换时间 3.三段逆置 综合来看我们的三段逆置是最优解那么该如何用代码来实现嘞 代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
void reverse(int* arr, int left, int right)
{while (left right)//俩端元素逆置{int temp 0;temp arr[left];arr[left] arr[right];arr[right] temp;left;right--;//俩元素逆置完后向中间缩小范围}
}
void rotate(int* nums, int numsSize, int k)
{k % numsSize;//为了减少不必要的轮转次数比如数组长度是5然后k是100000那么这个数组不论怎么旋转都只有5种情况reverse(nums, 0, numsSize - k - 1);//前n-k项逆置reverse(nums, numsSize - k, numsSize - 1);//后k项逆置reverse(nums, 0, numsSize - 1);//整体逆置
} PS看到这里了码字不易给个一键三连鼓励一下吧有不足或者错误之处欢迎在评论区指出