鱼C论坛

 找回密码
 立即注册
查看: 1858|回复: 3

[技术交流] 136_只出现一次的数字

[复制链接]
发表于 2019-6-15 10:09:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. /*
  2. 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

  3. 说明:

  4. 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

  5. 示例 1:

  6. 输入: [2,2,1]
  7. 输出: 1
  8. 示例 2:
  9. 输入: [4,1,2,1,2]
  10. 输出: 4
  11. */
复制代码

  1. int singleNumber(int* nums, int numsSize){
  2.    
  3.     int ret_val = 0;
  4.     int i = 0;
  5.    
  6.     for(i = 0; i <numsSize;i++)
  7.     {
  8.         ret_val ^= nums[i];
  9.     }
  10.     return ret_val;

  11. }
复制代码


  1. /*
  2. 最近提交结果:
  3. 通过
  4. 显示详情
  5. 执行用时 :12 ms, 在所有C提交中击败了99.46% 的用户
  6. 内存消耗 :7.9 MB, 在所有C提交中击败了40.52%的用户


  7. 16 / 16 个通过测试用例 状态:通过
  8. 执行用时:12 ms
  9. 提交时间:0 分钟之前

  10. */
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-6-15 10:11:08 | 显示全部楼层
利用异或特性~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-15 10:56:50 | 显示全部楼层
看不懂你说的异或怎么在你的code里体现,能解释一下吗,我用python写了一个,runtime:60ms


  1. class Solution:
  2.     def singleNumber(self, L):
  3.         head = self.get_head(L)
  4.         tail = self.get_tail(L)
  5.         if head in tail:
  6.             L1 = self.delete(head,tail)
  7.             self.singleNumber(L1)
  8.         else:
  9.             print(head)
  10.         
  11.     def get_head(self,L):
  12.         if len(L) >= 1:
  13.             return L[0]
  14.         else:
  15.             return []

  16.     def get_tail(self,L):
  17.         if len(L) >= 1:
  18.             return L[1:]
  19.         else:
  20.             return []

  21.     def delete(self,X, L):
  22.         if L == []:
  23.             return []
  24.         else:
  25.             if X == self.get_head(L):
  26.                 return self.delete(X, self.get_tail(L))
  27.             else:
  28.                 return [self.get_head(L)] + self.delete(X, self.get_tail(L))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-15 15:25:57 | 显示全部楼层
本帖最后由 风扫地 于 2019-6-15 17:54 编辑
Seawolf 发表于 2019-6-15 10:56
看不懂你说的异或怎么在你的code里体现,能解释一下吗,我用python写了一个,runtime:60ms


a ^ a = 0;
0 ^ b = b;
a ^ b ^ c = a ^ (b ^ c);
a ^ b ^ c = a ^ c ^ b;

异或操作满足结合律和交换律。
在本题中,出现偶数次的数在异或操作后会变成0,出现奇数次的数会最后剩下来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 17:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表