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

金融股票类app网站开发舆情信息网站

金融股票类app网站开发,舆情信息网站,做网站 以图搜货,php 网站cookie这里写目录标题 问题详情分析问题代码展示 问题详情 剑指 Offer 56: 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例: 输入&a…

这里写目录标题

  • 问题详情
  • 分析问题
  • 代码展示

问题详情

剑指 Offer 56:

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

示例:

输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]

分析问题

首先我们知道两个相同的数异或结果是0,而0异或任何数都是不变的;,而且异或运算是支持交换律和结合律;

C语言中的异或符号是’^’

如:353=335=0^5=5;

那如果数组nums中只有一个数出现一次,其它的数都出现了两次,那我们将所有的数组元素进行异或运算,不就可以得出结果了吗?

但是,在这里有两个只出现一次的数字,我们该怎么办呢,如果我们也将其所有的数组元素都异或在一起,那得出的数是不是就是那两个出现一次的数字异或的结果:

例:[1,1,2,3,4,4,5,5]

2 = 0010;3 = 0011

所以1123445^5 = 023 = 0001 = 1

那我们能不能将这两个数分开来呢?使这两个单独出现的数在它们所在的数组都是单独存在的。再分别异或,就能得出这两个数。
在这里插入图片描述

那如何分出这两个数呢:

我们先把数组nums中所有元素异或起来。

1123445^5 = 023 = 0011^0010 = 0001

相同的数异或为0,0与非0数异或为非0数本身。 所以,全部异或在一起就等价于两个单独数异或.

异或得出值0001,设这个值为ret 。通过观察可以发现,ret为1的位,就说明两个单独数的相同位是不同的。要么是1要么是0。不可能重复。

那我们如何去找到为1的位:

我们定义一个变量m = 1;将1(00000000000000000000000000000001)不断地左移m位,与ret进行&运算,如果结果为非0,那此时,1对应的位就是1向左移m位对应1的位置:

在这里插入图片描述

回到刚刚的数组:通过这个为1的位,和原数组中所有元素进行&运算,就可以把两个单独出现的数分开。其他出现两次的数因为二进制值相同也会共同出现在同一边。

在这里插入图片描述

到这我们写出这个程序就不难了。

代码展示

int* singleNumbers(int* nums, size_t numsSize, int* returnSize) {int ret = 0;int i = 0;//保存单独出现的数异或在一起的值for (i = 0; i < numsSize; i++){ret ^= nums[i];}int m = 0;//从低向高位找到ret中第m位为1的位置, 为1代表异或在一起的两个数不相同。//while (m < 32){if (ret & (1 << m)){break;}else{m++;}}int x = 0;//记录单独出现的数int y = 0;//记录单独出现的数for (i = 0; i < numsSize; i++){if (nums[i] & (1 << m)) //&为1的为一组 直接全部异或到一起记录其值{x ^= nums[i];}else  //为0的为一组{y ^= nums[i];}}int* retArr = malloc(2 * sizeof(int));retArr[0] = x;retArr[1] = y;*returnSize = 2;return retArr;
}int main()
{int p = 0;int arr[] = { 1,2,55,55,66,66 };int* a = singleNumbers(arr, sizeof(arr) / sizeof(int), &p);printf("%d ", a[0]);printf("%d ", a[1]);free(a);a = NULL;printf("%d ", p);return 0;
}
http://www.yayakq.cn/news/8766/

相关文章:

  • 做网站数据库怎么建西安电子商务网站开发
  • 医院互联网网站建设网站开发协助方案
  • wordpress手机建站教程灯塔建设网站
  • 泰安中文网站建设电话泰安人才信息网官网
  • 龙岗同乐社区网站建设手机访问网站建设中
  • 常州市住房建设局网站杭州最新消息
  • 网站建设一样注意什么沈阳头条新闻
  • 信誉好的购物网站深圳网站程序开发
  • 企业网站建设的作用网站网页策略
  • 为什么网站要域名解析一个完整的活动策划方案
  • 外贸推广的网站wordpress 启动wordpress mu
  • 最专业的网站建设机构哈尔滨招标信息网官网
  • 网站权重高+做别的关键词淮北市建设局网站
  • 长宁网站制作深圳网站设计价格表
  • 怎么把网站封包做app微信运营商怎么联系
  • 北京棋森建设有限公司网站长春专业网站建设价格
  • 如何添加网站为信任站点门户网站建设服务报价
  • 网站是如何盈利河池做网站
  • 网站建设属不属于无形资产宜兴网站建设公司
  • 个人网站备注哪个网站建站速度快
  • 做网站怎么防止被黑个人网站模板html免费
  • 房地产电子商务的网站建设建设淘宝网站的目的
  • 网站 动态 标签页青岛房产网链家
  • 设计公司给公司做网站用了方正字体网站 单页
  • 免费团购网站模板六盘水市住房和城乡建设局网站
  • 建设部注册监理工程师网站做一些网站犯法么
  • 设置网站域名网络优化工作应该怎么做
  • 毕业设计网站用什么做免费的黄冈网站有哪些平台游戏软件
  • 河北省建设厅工程信息网站郑州网站建设外包
  • 上海做电子商务网站的公司目标网站都有哪些内容