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

Python每日一练(20230515) 只出现一次的数字 I\II\III

目录

1. 只出现一次的数字 Single Number

2. 只出现一次的数字 II Single Number II

3. 只出现一次的数字 III Single Number III

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


leetcode题号: 136, 137, 260

1. 只出现一次的数字 Single Number

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

说明:

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

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

代码1: 用哈希表计数

def singleNumber(nums):hash_map = {}for num in nums:if num in hash_map:hash_map[num] += 1else:hash_map[num] = 1for num, count in hash_map.items():if count == 1:return numreturn 0if __name__ == '__main__':nums = [2, 2, 1]print(singleNumber(nums))nums = [4, 1, 2, 1, 2]print(singleNumber(nums))

代码2: 异或运算

def singleNumber(nums):res = 0for num in nums:res ^= numreturn resif __name__ == '__main__':nums = [2, 2, 1]print(singleNumber(nums))nums = [4, 1, 2, 1, 2]print(singleNumber(nums))

代码3: 算术运算

def singleNumber(nums):hash_map = {}sum1, sum2 = 0, 0for num in nums:if num in hash_map:hash_map[num] += 1else:hash_map[num] = 1sum1 += numfor num, count in hash_map.items():sum2 += 2 * numreturn sum2 - sum1if __name__ == '__main__':nums = [2, 2, 1]print(singleNumber(nums))nums = [4, 1, 2, 1, 2]print(singleNumber(nums))

输出:

1
4


2. 只出现一次的数字 II Single Number II

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

示例 1:

输入:nums = [2,2,3,2]
输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,99]
输出:99

提示:

  • 1 <= nums.length <= 3 * 10^4
  • -2^31 <= nums[i] <= 2^31 - 1
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

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

代码1: 用哈希表计数

def singleNumber(nums):hash_map = {}for num in nums:if num in hash_map:hash_map[num] += 1else:hash_map[num] = 1for num, count in hash_map.items():if count == 1:return numreturn 0if __name__ == '__main__':nums = [2, 2, 3, 2]print(singleNumber(nums))nums = [0, 1, 0, 1, 0, 1, 99]print(singleNumber(nums))

代码2: 位运算

def singleNumber(nums):res = 0for i in range(64):sum = 0for num in nums:sum += (num >> i) & 1if sum % 3 != 0:res |= 1 << ireturn resif __name__ == '__main__':nums = [2, 2, 3, 2]print(singleNumber(nums))nums = [0, 1, 0, 1, 0, 1, 99]print(singleNumber(nums))

 代码3: 算术运算

def singleNumber(nums):nums_set = set(nums)sum1 = sum(nums)sum2 = 3 * sum(nums_set)return (sum2 - sum1) // 2if __name__ == '__main__':nums = [2, 2, 3, 2]print(singleNumber(nums))nums = [0, 1, 0, 1, 0, 1, 99]print(singleNumber(nums))

输出:

3
99


3. 只出现一次的数字 III Single Number III

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

示例 1:

输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。

示例 2:

输入:nums = [-1,0]
输出:[-1,0]

示例 3:

输入:nums = [0,1]
输出:[1,0]

提示:

  • 2 <= nums.length <= 3 * 10^4
  • -2^31 <= nums[i] <= 2^31 - 1
  • 除两个只出现一次的整数外,nums 中的其他数字都出现两次

代码1: 用哈希表计数

def singleNumber(nums):m, res = {}, []for num in nums:m[num] = m.get(num, 0) + 1for num, count in m.items():if count == 1:res.append(num)return resif __name__ == '__main__':nums = [1, 2, 1, 3, 2, 5]print(singleNumber(nums))nums = [-1, 0]print(singleNumber(nums))nums = [0, 1]print(singleNumber(nums))

代码2: 位运算分组异或

def singleNumber(nums):xor = 0for num in nums:xor ^= nummask = 1while (xor & mask) == 0:mask <<= 1a, b = 0, 0for num in nums:if num & mask != 0:a ^= numelse:b ^= numreturn [a, b]if __name__ == '__main__':nums = [1, 2, 1, 3, 2, 5]print(singleNumber(nums))nums = [-1, 0]print(singleNumber(nums))nums = [0, 1]print(singleNumber(nums))

输出:

[3 5]
[-1 0]
[1 0]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

相关文章:

  • 基于【EasyDL】【图像分类】实现农作物病害识别小程序
  • 元宇宙又“死”了!Epic老板:你当6亿用户是摆设?
  • 阶段小结2022
  • linux0.12-8-11-vsprintf.c
  • Node.js 与 WebAssembly
  • OpenCL编程指南-4.4矢量操作符
  • 索洛模型(二)
  • 【多微电网】基于粒子群优化算法的面向配电网的多微电网协调运行与优化(Matlab代码实现)
  • 使用Atmel Studio开发Arduino的ATmega328P单片机
  • docker基础命令
  • 数组名+1和数组名+1的区别
  • 开放原子训练营(第三季)inBuilder低代码开发实验室初体验
  • sql数据定义语句(cascade,set,null,no action的区别)
  • Java进程(基础)
  • Android之 Activity活动详解
  • 车载软件架构——闲聊几句AUTOSAR BSW(五)
  • APP图标尺寸规范一文了解清楚
  • 写给程序员Android Framework 开发,
  • html实现一个一闪一闪的按钮,CSS实现一个一闪一闪的按钮,Css闪烁点标,css设置按钮层次感,css按钮美化,CSS按钮动画过渡,CSS按钮添加阴影
  • 品优购项目学习记录04--列表页
  • script标签type值application/json,importmap和module
  • 基于ArcGIS实现陕西省1:250000比例尺地形图分幅和编号
  • 校园安全,一键报警主机助力保障
  • RabbitMQ养成记 (7. 消息可靠性投递)
  • SpringBoot配置连接两个或多个数据库
  • Python面试题汇总:高效备战技巧
  • 如何区分比特率、波特率和频谱带宽?
  • sklearn中的特征工程(过滤法、嵌入法和包装法)
  • Linux C/C++并发编程实战(0)谈谈并发与并行
  • 2023年5月天津/南京/成都/深圳CDGA/CDGP数据治理认证报名