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

html5 网站源码深圳代理记账公司前十名

html5 网站源码,深圳代理记账公司前十名,松桃和兴建设公司网站,网站建设意义必要性经典题型—旋转数组 文章目录 经典题型---旋转数组一、题目二、代码实现 一、题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步…

经典题型—旋转数组

文章目录

  • 经典题型---旋转数组
    • 一、题目
    • 二、代码实现

一、题目

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

示例 1:

输入: 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]

示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释: 
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

提示:

1 <= nums.length <= 105

-231 <= nums[i] <= 231 - 1

0 <= k <= 105

题目理解

右旋可以理解成数组里的元素向右挪动k个单位,而出界的元素再按照正序补到前面的空位。

在这里插入图片描述
但是如果当k > numsSize的时候,那就需要使用到余数了,k % numsSize,直到k小于numsSize就可以进行程序操作了。

二、代码实现

法一:数组翻转法

void rotate(int* nums, int numsSize, int k) {int i = 0, j = 0;for (i = 0, j = numsSize - k - 1; i <= j; i++, j--){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}for (i = numsSize - k, j = numsSize - 1; i <= j; i++, j--){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}for (i = 0; i < numsSize; i++){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}

优化

void Reverse(int* nums, int begin, int end)
{int i = 0, j = 0;for (i = begin, j = end; i <= j; i++, j--){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}
void rotate(int* nums, int numsSize, int k)
{int i = 0, j = 0;Reverse(nums, 0, numsSize - k - 1);Reverse(nums, numsSize - k, numsSize - 1);Reverse(nums, 0, numsSize - 1);
}

不难看出时间复杂度是O(2n),即O(n)

法二:临时数组法

void rotate(int* nums, int numsSize, int k) 
{int arr[100000] = { 0 };if (0 == k){;}else{k %= numsSize;while (k >= numsSize){k %= numsSize;}int i = 0, j = 0;for (i = 0, j = numsSize - k; i < k, j <= numsSize - 1; i++, j++){arr[i] = nums[j];}for (i = k, j = 0; i <= numsSize - 1, j < numsSize - k; i++, j++){arr[i] = nums[j];}for (i = 0, j = 0; i < numsSize, j < numsSize; i++, j++){nums[i] = arr[j];}}
}

优化

void rotate(int* nums, int numsSize, int k) {int newArr[numsSize];//变长数组不能初始化for (int i = 0; i < numsSize; ++i) {newArr[(i + k) % numsSize] = nums[i];}for (int i = 0; i < numsSize; ++i) {nums[i] = newArr[i];}
}

这个方法在使用时,笔者掉入了一个很危险的错误,和大家分享出来,希望大家在以后的编程上避开这个坑。**

错误示范:

void rotate(int* nums, int numsSize, int k) {//返回栈空间地址的问题int arr1[100000] = { 0 };if (0 == k){;}else{k %= numsSize;while (k >= numsSize){k %= numsSize;}int i = 0, j = 0;for (i = 0, j = numsSize - k; i < k, j <= numsSize - 1; i++, j++){arr1[i] = nums[j];}for (i = k, j = 0; i <= numsSize - 1, j < numsSize - k; i++, j++){arr1[i] = nums[j];}}nums = arr1;
}

这是一个非常典型的返回栈空间(临时变量地址)的错误,在执行函数过程中,创建了一个临时数组,这个数组存储的就是满足输出形式的数组,但是当函数调用结束后,这块空间就被销毁了,nums反而成了野指针,所以这样的问题一定要避免。

在返回地址的时候要十分小心

http://www.yayakq.cn/news/528907/

相关文章:

  • 视频网站开发有哪些功能龙岩网站建设模块制作
  • 网站建设基本常识用ssh做的网站
  • 湖州微网站建设做360手机网站快
  • 建立网站商店深圳哪家网站建设的公司好
  • 如何建设一个网站网页怎么建立一个网站让百度搜到
  • 怎么做家教网站wordpress 翻译语言
  • 哪里有做网站平台网页视频下载到电脑
  • 深圳网站建设延安ps如何做网站横幅
  • 网站建设类公司网页脚本设计
  • 建设厅网站用户名和密码广告设计工资高吗
  • 合肥网站建设是什么意思企业网站建设方案书模板
  • 中山高端网站建设公司怎样建设网站?(怎样注册域名?如何选择主机?网站应有哪些功能模块
  • 舟山网站开发一台网站服务器多少钱
  • 网站导航网公众号开发一般收费
  • 做网站要注册公司么给了几张图让做网站
  • 做网站的流程是什么怎么在文档中做网站一点就开
  • 有后台的网站模版长春高铁建站
  • 读网站建设一定要买电脑实践吗手机模拟器
  • 投标网站建设python手机在线编程
  • 上海人才招聘网站做网站要求什么条件
  • 深圳网站设计公司哪家工艺好wordpress怎么修改数据库密码忘记
  • asp网站伪静态页面营口网站开发公司
  • 哪个网站做ppt模板赚钱离婚协议书正规模板
  • 一个备案号多个网站wordpress换皮肤时500
  • 网站开发行业标准怎样建设大型网站
  • 企业网站建设熊掌号2018年做淘宝客网站还能挣钱吗
  • 贤邦网站建设app开发wordpress qq登录微信登录界面
  • 做多语言网站多少钱手机地图app下载安装
  • 淄博网站客户河南省建设厅注册中心网站首页
  • 哪个设计网站做兼职好如何查询企业邮箱