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

力扣136.只出现一次的数字

题目:

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

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

思路:

既然是数组中的元素只出现一次,能想到的有三种情况:结果在第一位:12233.... 或 结果在中间位置:112234455... 或 结果在末尾112233...4,既然只有这几种情况出现,不妨先用简单的解法解答一下:

但这种解法的时间复杂度是sort占主导为O(n logN),while循环是O(n),所以最后的时间复杂度是O(N),虽然空间复杂度是O(1),但没有对应题目上的线性时间复杂度,所以还需要另一种解法,就是使用位运算,异或的性质。

class Solution {
public:int singleNumber(vector<int>& nums) {//只有一个元素就是结果,直接返回if(nums.size() == 1) return nums[0];//只有三种情况,12233 或 11233  或  11223sort(nums.begin(),nums.end());int i = 0;int n = nums.size();while(i < n-1){if(nums[i] == nums[i+1]){i+=2;}else{return nums[i];//第二种情况}}if(i == n-1) return nums[n-1];//第三种情况else return nums[0];//第一种情况}
};

另一个思路:

使用异或解答:

可以看到代码量很少,一个for循环就解决了,时间复杂度是O(N),我认为这个题目能一次做出这种解法的人是天才,因为此题目像是为了一包醋去特意包的饺子,根据异或性质(异或运算消除偶数1的性质)来出的题。

class Solution {
public:int singleNumber(vector<int>& nums) {int ret = 0;for(auto it:nums){ret = ret ^ it;}return ret;}
};

http://www.dtcms.com/a/450453.html

相关文章:

  • 网站的分页效果怎么做网站备案有什么作用
  • 怎么做自己的网站徐州建设局官网
  • 记事本代码做网站科学小制作
  • 丹东网站网站建设怎么做相册的网站
  • 湖州做网站公司有那几家广州网站制作系统
  • html判断域名 然后再跳转到网站推广策略英文
  • 4.12 环境光照
  • mcp sse 直接调用mcp方法
  • 11、Linux 密码管理
  • dedecms网站地图路径修改生成后 网站地图前台路径不变爬虫怎么看网站开发者模式
  • 思科交换机VLAN超简单配置(草稿)
  • 上海兼职网站制作seo网站优化外包
  • lol视频网站模板网站开发公司安心加盟
  • 期货网站开发杭州工程建设网
  • 8. 直线方程式
  • 小红书网站开发费用电脑做服务器上传网站
  • 丘受网站谁做的网球吧电商是做什么
  • daya87—字符串—同构字符串(LeetCode-205)
  • AI编程开发系统018-基于Vue+SpringBoot的付费自习室管理系统(源码+部署说明+演示视频+源码介绍+lw)
  • 网站建设合同前期需注意哪些问题海口财务
  • 写网站的教程宝安专业网站建设
  • 黑龙江营商环境建设局网站呼和浩特市做网站公司好的
  • Redis核心通用命令深度解析
  • 官方网站的推广策划怎么做企业查询宝下载
  • python如何控制电脑鼠标
  • 网站建设记录过程wordpress中接入支付宝
  • 一个网站的预算吉林省住房与建设厅网站
  • 网站动态小图标网站建设的流程步骤
  • 网站你懂我意思正能量晚上下载绵竹seo
  • 简约式网站模板怎样用dw做网站