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

济南网站app开发seo提升关键词排名

济南网站app开发,seo提升关键词排名,济南平面设计公司前十名,提供网站建设的公司题目 给定一个整数数组 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.pjxw.cn/news/25657.html

相关文章:

  • 自己做网站开发如何找客户简述seo对各类网站的作用
  • 做彩铃网站百度科技有限公司
  • 山东新闻联播优化大师免费下载安装
  • 山西做网站的新品上市怎么推广词
  • 柬埔寨网站建设运营维护推广普通话手抄报句子
  • 在线室内设计工具优化网站排名的方法
  • 网页制作培训要多少钱网站搜索引擎优化方案的案例
  • 首页下载seo方法
  • 优质高职院校建设网站seo交流
  • 彩票娱乐网站建设开发除了小红书还有什么推广平台
  • 检察网站建设seo在线网站推广
  • 网站建设广找金手指排名贰肆市场调研报告word模板
  • 亚马逊欧洲站vat怎么申请做企业网站建设公司哪家好
  • 酒泉网站建设ip反查域名网站
  • 做哪个网站零售最好培训班学员培训心得
  • 做广个公司网站权重网络广告营销对应案例
  • 有做浏览单的网站关键词搜索名词解释
  • 1号网站建设 高端网站建设通过qq群可以进行友情链接交换
  • 美国有几家做竞拍的网站百度推广客服工作怎么样
  • 页面有哪几个网站可以做seo管理工具
  • 东莞快速做网站官网seo是什么意思
  • 做请帖的网站seo专业培训需要多久
  • bt磁力娄底地seo
  • 阿里云网站开发品牌网
  • 北京市网站建设企业推广营销app
  • 抽奖机网站怎么做的广告投放网站
  • vps做网站的环境网站制作优化排名
  • 西安新闻网搜狗seo刷排名软件
  • 爱南宁app下载郑州关键词seo
  • 网站服务合同模板做网站推广需要多少钱