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

网站首页做301聊城手机网站服务

网站首页做301,聊城手机网站服务,wordpress绑定域名后乱码,纪念馆网站建设文章目录 1、消失的数字1.1 题目描述1.2 题目分析 2、轮转数字2.1 题目描述2.2 题目分析 1、消失的数字 原题链接:消失的数字 1.1 题目描述 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗…

文章目录

  • 1、消失的数字
    • 1.1 题目描述
    • 1.2 题目分析
  • 2、轮转数字
    • 2.1 题目描述
    • 2.2 题目分析

1、消失的数字

原题链接:消失的数字

1.1 题目描述

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
注意:本题相对书上原题稍作改动

示例 1:
输入:[3,0,1]
输出:2

示例 2:
输入:[9,6,4,2,3,5,7,0,1]
输出:8

1.2 题目分析

思路一:
首先想到的思路是等差数列求和,数组nums包含0到n的所有整数,但是缺了一个,那么我们只需要对0到n求和,再将得到的前n项和减去数组的和,得到的差值就是那个缺失的数字。
代码实现:

int missingNumber(int* nums, int numsSize) {int sum = numsSize * (numsSize + 1) / 2;for(int i = 0;i < numsSize; ++i){sum-=nums[i];}return sum;
}

思路二:
第二个思路是利用位运算。常见的位运算有按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)、右移(>>)。
我们这里要用到的是按位异或(^),按位异或是相同为0不同为1,例如5 ^ 3,5的二进制是0101,3的二进制的0011,他们按位异或的结果就是0110,也就是6。任何整数和它本身按位异或,得到的结果都是0,和0按位异或,得到的结果是它本身。
首先nums数组中有n个数,而0到n有n+1个数,总共2n+1个数,而那个消失的数字只在n+1个数中出现一次,而其他数字都出现了两次,所以我们可以用0对这2n+1个数依次按位异或,得到的最后结果就是那个消失的数字。
举个小例子:
nums:[0,1,3]
0~n:0 1 2 3
先让0和nums依次按位异或:

  1. 0^0 = 0
  2. 0^1 = 1
  3. 1^3 = 2

再让2和0~n依次按位异或:

  1. 2^0 = 2
  2. 2^1 = 3
  3. 3^2 = 1
  4. 1^3 = 2

可以看到,最终的结果就是消失的2
代码实现如下:

int missingNumber(int* nums, int numsSize) {int x = 0;int n = numsSize;for(int j = 0;j < numsSize;++j){x^=nums[j];}for(int i = 0;i <= n;++i){x ^= i;}return x;
}

2、轮转数字

原题链接:轮转数组

2.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]

2.2 题目分析

思路一:
使用memcpy()函数,该函数的用法在cppreference中如下:
https://legacy.cplusplus.com/reference/cstring/memcpy/?kw=memcpy
在这里插入图片描述
它一共有三个参数,第一个表示要复制到的目标内存块,第二个是表示我们要复制的内容,第三个是我们要复制的字节数。
首先我们让k和数组的长度进行取模,这样做的原因是,当k和numsSize为倍数关系时,数组轮转后还是原来的数组,取模可以减少不必要的重复计算。紧接着我们创建一个临时数组tmp,用来存储旋转后的元素,在进行拷贝的过程中,要确定自己的拷贝位置以及要拷贝的字节数。
首先我们要先把nums数组中的后k个元素复制到tmp数组的起始位置,然后再把nums数组前numsSize-k个元素复制到tmp数组中,从下标为k的位置上开始放,因为题目要我们返回的是nums数组,因此最后一步我们将tmp整个拷贝到nums,完成旋转操作。
实现代码如下:

void rotate(int* nums, int numsSize, int k) {k %= numsSize;int tmp[numsSize];//0  n-k-1   n-k  n-1memcpy(tmp,nums+numsSize-k,sizeof(int)*k);memcpy(tmp+k,nums,sizeof(int)*(numsSize-k));memcpy(nums,tmp,sizeof(int)*numsSize);
}

思路二: 先逆置前n-k个,再逆置后k个,最后将整个数组逆置。

假设现在有一个数组[1,2,3,4,5],k = 3,先逆置前n-k个也就是前2个,得到数组[2,1,3,4,5],再逆置后k个也就是后三个,得到数组[2,1,5,4,3],再整体逆置,得到数组[3,4,5,1,2],得到最终答案。

我们可以先封装一个逆置函数,即左右双指针向中间步进,借助第三个变量来逆置。然后再根据上面的思路对数组进行分段逆置。
代码实现如下:

void Reverse(int* a, int left, int right)
{while(left<right){int tmp = a[left];a[left] = a[right];a[right] = tmp;++left;--right;}
}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);
}

本期文章就到这里啦,刷题系列会紧随我的刷题进度不断更新的,大家如果有想到更优化的方法,也可以在评论区提出,有不足和错误的地方,也请指出,下一篇文章见,拜拜~


文章转载自:

http://nEC8PdZO.txmkx.cn
http://HRvUVInS.txmkx.cn
http://nzU5Cp5K.txmkx.cn
http://ZkviCAOf.txmkx.cn
http://Svcr8Noc.txmkx.cn
http://dwGdDtEm.txmkx.cn
http://yLCsJZoM.txmkx.cn
http://4uMQwpIi.txmkx.cn
http://epjiRGoD.txmkx.cn
http://DXXVD0GI.txmkx.cn
http://7G7xRM0y.txmkx.cn
http://pXFV8ACn.txmkx.cn
http://a8xapXb0.txmkx.cn
http://c8o4ZIk7.txmkx.cn
http://XfbJkkXS.txmkx.cn
http://a0UFp0NR.txmkx.cn
http://yciMy1E2.txmkx.cn
http://Y5a0soHg.txmkx.cn
http://FVkTisfi.txmkx.cn
http://oa7NJSuJ.txmkx.cn
http://MmF8k2Yp.txmkx.cn
http://LjFwE6Lw.txmkx.cn
http://w5GO68lv.txmkx.cn
http://WodgO2eP.txmkx.cn
http://ZnePraTM.txmkx.cn
http://ccKJX5M3.txmkx.cn
http://ZN1k9tz6.txmkx.cn
http://tQqcqrMd.txmkx.cn
http://djX5C8Is.txmkx.cn
http://vR4UvYes.txmkx.cn
http://www.dtcms.com/wzjs/763004.html

相关文章:

  • 电商网站开发建设用搬瓦工搭建wordpress
  • wordpress 淘客网站app外包公司有哪些
  • 哪些网站做代理网络规划设计师备考
  • 网站建设多少钱比较合适福州网站建设营销方案
  • 心悦会员免做卡网站杭州西湖区网站建设
  • 汕头网站时优化网站开发数据如何转化
  • 网站开发所需基础知识做小程序商城
  • 赣州网站建设中心北京亦庄做网站公司
  • 餐饮业网站建设Wix做的网站在国内打不开
  • 英铭广州网站建设进一步加强网站建设管理
  • 泰安网站推广 泰安网站建设9377网页游戏
  • 做网站推广弊端北京计算机培训机构前十名
  • 无法进行网站备案注册网站花的钱做会计分录
  • 江门网站推广南宁seo渠道哪家好
  • 百度教育网站家乡网页设计论文
  • 中国行业网站联盟cps推广联盟
  • 东莞网站建设代理商wordpress替换google字体
  • 公司信息网站建设目标免费推广方式都有哪些
  • 广州一次做网站深圳创业补贴
  • 嘉定网站建设网页制作线上企业订单管理系统网站
  • 网站为何站长统计wordpress 整站下载
  • 东钱湖镇建设局网站网页设计与网站建设试题及答案
  • 北京网站建设公司朝阳黑龙江省建设造价协会网站
  • wamp配置多个网站小程序服务开发公司
  • 网站面包屑导航桂林市风尚网络科技有限公司
  • 汽配网站建设成本凡科网门店通
  • 通过网站做外贸东营大众网
  • 天津网站制作的公司智能小程序开发者平台
  • 贾汪区住房和城乡建设局网站盐城网站建设要多少钱
  • 天津市中小企业局网站wordpress网站打包app