当前位置: 首页 > news >正文

国际营销网站建设软件推广赚佣金渠道

国际营销网站建设,软件推广赚佣金渠道,直销购物网站开发,一键免费建立网站题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 void rotate(int* nums, int numsSize, int k){}示例: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] …

题目

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

void rotate(int* nums, int numsSize, int k){}

示例:
输入: nums = [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]

思路1

如示例所示般,一个一个地转。
先将数组最后一个元素储存到val,再将前numsSize-1个元素向后搬,最后把val的值赋给nums[0],就实现了最后一个元素放到数组开头。循环k次,就完成了轮转。

此方法效率较低,可能会超时。

void rotate(int* nums, int numsSize, int k) {//循环k次for (int i=0; i<k; i++){//数组最后一个元素储存到valint val = nums[numsSize-1];//前numsSize-1个元素向后搬for (int j=numsSize-1; j>0; j--){nums[j] = nums[j-1];}//把val的值赋给nums[0]nums[0] = val;}
}

思路2

三次逆置

示例:
输入: nums = [1,2,3,4,5,6,7], k = 3
4 3 2 1 5 6 7 前numsSize-k个逆置
4 3 2 1 7 6 5 后k个逆置
5 6 7 1 2 3 4 整体逆置

void rotate(int* nums, int numsSize, int k){//k要小于numsSizek %= numsSize;//前numsSize-k个逆置for (int i=0; i<(numsSize-k)/2; i++){int temp = nums[i];nums[i] = nums[numsSize-k-1-i];nums[numsSize-k-1-i] = temp;}//后k个逆置for (int i=0; i<k/2; i++){int temp = nums[numsSize-k+i];nums[numsSize-k+i] = nums[numsSize-1-i];nums[numsSize-1-i] = temp;}//整体逆置for (int i=0; i<numsSize/2; i++){int temp = nums[i];nums[i] = nums[numsSize-1-i];nums[numsSize-1-i] = temp;}
}

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

  1. 次数k如果等于0,逆置0次为没有逆置,数组不变,没有运算的必要。
  2. k要小于musSize,会有k大于等于numsSize的情况。例如:nums={-1},k=2。如果k=numsSize的话,逆置结果为原来的数组,不变,没有计算的必要。使用求余%操作使得k的取值范围为0~numsSize-1。
  3. for循环里,循环条件里需要 /2,如果时下标0~numsSize的元素逆置,当i=0时,nums[0]和nums[numsSize-1]交换;当i=numsSize-1时,nums[numsSize-1]和nums[0]交换,交换两次,结果不变。

代码改进

将交换部分封装函数reverse

void reverse(int* nums, int begin, int end)
{while (begin < end){int tmp = nums[begin];nums[begin] = nums[end];nums[end] = tmp;++begin;--end;}
}
void rotate(int* nums, int numsSize, int k)
{k %= numsSize;reverse(nums, 0, numsSize-k-1);reverse(nums, numsSize-k, numsSize-1);reverse(nums, 0, numsSize-1);
}

//3.空间换时间

开辟新空间tmp储存逆置后的数组,分别将前numsSize-k个和后k个放到tmp,因为nums是一级指针,所以直接nums=tmp没有用,要通过memcpy函数将tmp(逆置后的数组)复制给原数组

void rotate(int* nums, int numsSize, int k)
{k %= numsSize;int* tmp = (int*)malloc(sizeof(int)*numsSize);//逆置memcpy(tmp, nums+numsSize-k, sizeof(int)*k);memcpy(tmp+k, nums, sizeof(int)*(numsSize-k));//复制给原数组memcpy(nums, tmp, sizeof(int)*numsSize);//释放空间free(tmp);tmp = NULL;
}

时间复杂度O(n); 空间复杂度O(n)

http://www.shuangfujiaoyu.com/news/23793.html

相关文章:

  • 移动网站建设制作公司公司开发设计推荐
  • 个人网站可以做评论功能吗爱站查询
  • 上海影城改造升级江门网站优化公司
  • 莱芜关于网站建设的公司百度关键词搜索量
  • 野花香电视剧在线观看高清邯郸网站优化公司
  • cnnic可信网站必须做吗百度极速版推广员怎么申请
  • 顺德网站建设公司信息网络营销活动策划
  • 用java做信息发布网站网店如何引流与推广
  • 制作天下网站公司网络营销策划书
  • 网站建设合同编号软文推广服务
  • 滨州做网站建设百度推广公司哪家比较靠谱
  • node可以做电商网站么网络营销和网站推广的区别
  • 网站后台制作这么做最近的大新闻
  • php网站开发前端百度seo搜索引擎优化厂家
  • 域名网站怎么做的seo sem是什么职位
  • 网站吸引流量的方法百度云网盘网页版登录
  • 网站建设项目选题邯郸网站seo
  • 做电商在什么网站网络推广引流方式
  • 互联网专线做网站怎么做数据关键词搜索爱站
  • wordpress 本地写文章惠东seo公司
  • 空壳网站清理哪里可以接广告
  • 网站的创新点有哪些网站快照优化公司
  • 做网站就要租服务器2024年阳性什么症状
  • 吉林省建设安全厅官方网站南京百度提升优化
  • 公司就我一个网站制作seo业务培训
  • 快速搭建网站的软件百度快速排名技术培训教程
  • 秀米编辑器优化方案的格式及范文
  • 如何建造网站网站营销与推广
  • 委托别人做网站侵权了今日头条(官方版本)
  • 企业站网站建设seo快速排名系统