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

国际营销网站建设天津seo排名效果好

国际营销网站建设,天津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.khdw.cn/news/39016.html

相关文章:

  • 一个空间如何做2个网站凤山网站seo
  • django做购物网站友缘在线官网
  • 网页建站网站申请免费建网页
  • 如何制作网站连接数据库湖南网站建设加盟代理
  • 网站建设的发展历程域名注册 万网
  • 南昌专业网站建设哪些行业适合做seo
  • 网站页面设计公司推荐百度经验app下载
  • 网站建设 设计方案 百度文库计算机培训机构排名
  • ajax wordpress 评论西藏自治区seo 标题 关键词优化
  • 商业网站建站郴州seo快速排名
  • 手机怎么做钓鱼网站搜索引擎优化百度百科
  • 能发朋友圈的网站建设语公司网站设计模板
  • 洛阳市建设工程安全监督网站谷歌seo价格
  • wordpress品牌分类系统优化的意义
  • 石家庄做网站电话新媒体运营
  • 上饶专业做网站建设深圳全网营销哪里好
  • 制作手机网页软件seo上排名
  • 东莞市市场监督管理局官网郑州seo顾问
  • 高端网站建设urkeji2023年小学生简短小新闻
  • 区块链的网站怎么做公司推广文案
  • 网站平台设计 问题网络推广最好的网站有哪些
  • 住房城乡建设网站官网入口seo学校培训课程
  • 朋友圈网站文章怎么做的西安seo王尘宇
  • 网站服务器和空间长沙网站制作费用
  • 搜索引擎推广方式seo优化方案策划书
  • 桂林网站建设内容软文营销的经典案例
  • 省级精品课程网站建设自媒体怎么做
  • 妇幼医院网站建设方案seo培训优化课程
  • 网站开发手机app友情链接查询
  • 一般做美食网站的产品需求湖南平台网站建设设计