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

leetcode做题笔记136. 只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

思路一:快排(时间复杂度不符)

int cmp(const void*a,const void *b){return *(int*)a-*(int*)b;
}int singleNumber(int* nums, int numsSize){qsort(nums,numsSize,sizeof(int),cmp);for(int i = 0;i<numsSize-1;i++){if(nums[i]==nums[i+1])i++;else return nums[i];}return nums[numsSize-1];
}

分析:

本题要找出只出现一次的元素,可以考虑先将数组内数先进行排序后找出只出现一次的数,即每两个数判断一次,当前后数不一致时返回那个数

思路二:位运算

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

分析:

题目中描述使用线性时间复杂度同时要求用常量额外空间即可想到使用位运算来解决,由于相同的数异或为零,而0与其他数异或得到的为另一个数,所以使用异或来解决,for循环遍历完数组后返回N即可解决

总结:

本题考察位运算的用法,在数据量不大的情况下,快排所用时间不一定多于位运算,了解位运算的几个公式即可解决

http://www.lryc.cn/news/165778.html

相关文章:

  • vuex 模拟异步调用
  • error:Failed building wheel for XXX
  • 【linux命令讲解大全】112.Linux 系统管理工具:dpkg-statoverride 和 dstat 的使用介绍
  • ffmpeg草稿
  • 熵 | 无线通信知识
  • 黑马JVM总结(七)
  • Vue3核心语法一
  • 5.11.Webrtc接口的设计原理
  • 2022年09月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Vue3 监听属性-watch
  • JWT安全
  • LabVIEW利用人工神经网络辅助进行结冰检测
  • Linux安装MySQL8.0
  • 【【萌新编写RISCV之前言CPU的部分介绍.3】】
  • dl_model_param
  • Android相机调用-CameraX【外接摄像头】【USB摄像头】
  • 第一个Java程序
  • OpenCV之霍夫变换检测直线
  • lv3 嵌入式开发-11 Linux下GDB调试工具
  • Zabbix监控平台概念
  • 【javaSE】 枚举与枚举的使用
  • NetSuite知识会汇编-管理员篇顾问篇2023
  • 根号分治与多项式的巧妙结合:GYM-104386G
  • 通过FTP高速下载几百G数据
  • cudnn-windows-x86_64-8.6.0.163_cuda11-archive 下载
  • 多线程案例(1) - 单例模式
  • Arduino驱动TCS34725传感器(颜色传感器篇)
  • 知识库网站如何搭建?需要注意这五个要点!
  • 【UE虚幻引擎】UE源码版编译、Andorid配置、打包
  • 树和二叉树的相关概念及结构