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

news2024/11/24 3:30:05

目录

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] += 1
        else:
            hash_map[num] = 1
    for num, count in hash_map.items():
        if count == 1:
            return num
    return 0

if __name__ == '__main__':
    nums = [2, 2, 1]
    print(singleNumber(nums))
    nums = [4, 1, 2, 1, 2]
    print(singleNumber(nums))

代码2: 异或运算

def singleNumber(nums):
    res = 0
    for num in nums:
        res ^= num
    return res

if __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, 0
    for num in nums:
        if num in hash_map:
            hash_map[num] += 1
        else:
            hash_map[num] = 1
        sum1 += num
    for num, count in hash_map.items():
        sum2 += 2 * num
    return sum2 - sum1

if __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] += 1
        else:
            hash_map[num] = 1

    for num, count in hash_map.items():
        if count == 1:
            return num

    return 0

if __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 = 0
    for i in range(64):
        sum = 0
        for num in nums:
            sum += (num >> i) & 1
        if sum % 3 != 0:
            res |= 1 << i
    return res

if __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) // 2

if __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) + 1
    for num, count in m.items():
        if count == 1:
            res.append(num)
    return res

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))

代码2: 位运算分组异或

def singleNumber(nums):
    xor = 0
    for num in nums:
        xor ^= num
    mask = 1
    while (xor & mask) == 0:
        mask <<= 1
    a, b = 0, 0
    for num in nums:
        if num & mask != 0:
            a ^= num
        else:
            b ^= num
    return [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.coloradmin.cn/o/526826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源项目ChatGPT-website再次更新,累计下载使用1600+

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

数据交换方式(电路,报文,虚电路分组交换,数据报分组交换)

电路交换&#xff1a; 电路交换是通信网中最早出现的一种交换方式&#xff0c;在进行数据传输前&#xff0c;两个结点之间必须先建立一条专用&#xff08;双方独占&#xff09;的物理通信链路。该线路在整个数据传输期间一直被独占&#xff0c;用户始终占用端到端的固定传输带…

python实现带有操作界面的计算器程序,实现基本的数值计算,支持负数、小数、加减乘除等运算。

一、程序要求 python实现带有操作界面的计算器程序,实现基本的数值计算,支持负数、小数、加减乘除等运算。 预期计算器界面如下: 二、代码实现 1、python3自带tkinter,可以用来做可视化界面: import tkinter as tk import re 2、新建窗口对象,设置高宽、设置标题和背景…

【分布族谱】正态分布和对数正态分布的关系

文章目录 正态分布对数正态分布的推导测试 正态分布 正态分布&#xff0c;最早由棣莫弗在二项分布的渐近公式中得到&#xff0c;而真正奠定其地位的&#xff0c;应是高斯对测量误差的研究&#xff0c;故而又称Gauss分布。。测量是人类定量认识自然界的基础&#xff0c;测量误差…

UEFI 界面实例解析

这篇文章主要记录一些setup界面的实例&#xff0c;这些实例都是EDK上的&#xff0c;我们可以看到如下图&#xff1a; 上面三个为banner&#xff0c;下面的都是通过LABLE动态加载的&#xff0c;代码如下&#xff1a; 我们可以看到 UiListThirdPartyDrivers (HiiHandle, &gEf…

Sentinel 熔断降级和黑白名单控制

一、熔断降级 1、概述 除了流量控制以外&#xff0c;对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块&#xff0c;可能是另外的一个远程服务、数据库&#xff0c;或者第三方 API 等。例如&#xff0c;支付的时候&#xff0c;…

【C++ 入坑指南】(06)运算符

文章目录 一、算术运算符二、赋值运算符三、比较运算符四、逻辑运算符五、算法题5.1、拆分位数 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 运算符类型作用算术运算符用于处理四则运算赋值…

交换机配置第十二讲(ACL访问控制)

1.实验介绍 设备规划 类型名称数量终端PC3路由器AR22403 IP规划 主机 ip链接交换机端口网关client1192.168.1.2AR1-g/0/0/0192.168.1.1client2192.168.2.2AR2-g/0/0/1192.168.2.1client3192.168.3.2AR3-g/0/0/1192.168.3.1 2. 连线图介绍 连线顺序 3. 基础配置介绍 我们首…

基于SSM的高校共享单车管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

〖大前端 - 基础入门三大核心之JS篇㉞〗- JavaScript 的「立即执行函数IIFE」

当前子专栏 基础入门三大核心篇 是免费开放阶段。推荐他人订阅&#xff0c;可获取扣除平台费用后的35%收益&#xff0c;文末名片加V&#xff01;说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费开放&#xff0c;购买任意白宝书体系化专栏可加入TFS…

Threejs进阶之十四:在uniapp中使用threejs创建三维图形

在uniapp中使用threejs 一、uni-app介绍二、新建uni-app项目三、安装three.js库四、在vue组件中引入three.js库五、创建场景(Scene)和相机(Camera)六、创建渲染器(Renderer)七、创建物体和灯光八、渲染场景(Scene)九、运行测试核心代码 一、uni-app介绍 uni-app是一个基于Vue.…

AutoSar CanNm笔记

文章目录 网络管理目的CanNM与其他模块之间关系主动唤醒和被动唤醒状态管理1. 总线睡眠模式&#xff08;Bus-Sleep Mode&#xff09;2. 准备总线睡眠模式&#xff08;Prepare Bus-Sleep Mode&#xff09;3. 网络模式&#xff08;Network Mode&#xff09;3.1 重复报文状态(Repe…

SD-如何训练自己的Lora模型

官方地址&#xff1a;GitHub - bmaltais/kohya_ss 尝试过mac和Ubuntu&#xff0c;装上后都会有问题 Windows按照官方步骤安装即可 第一步 git clone https://github.com/bmaltais/kohya_ss.git cd kohya_sspython -m venv venv .\venv\Scripts\activatepip install torch1.…

1710_开源pdf阅读器SumatraPDF使用体验

全部学习汇总&#xff1a; GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 被很多国产免费软件折腾的电脑有点扛不住了&#xff0c;从昨天起打算在Windows上开始开源之路。先用LibreOffice换掉了之前一直觉得…

ansible roles常用用法

目录 一、说明 二、创建 ansible 环境 三、实验操作 四、install_ansible.sh 脚本内容 一、说明 该文档是日常经常使用的模板&#xff0c;通过该例子让更多的初学者了解ansible 剧本的写法&#xff0c;很多情况&#xff0c;可以按照该模版来套用即可。 读者不需要下载…

GPT前2代版本简介

承接上文ChatGPT进化的过程简介 2018年&#xff0c;Google的Bert和OpenAI的GPT绝代双骄&#xff0c;两者非常像&#xff0c;都是语言模型&#xff0c;都基本上是无监督的方式去训练的&#xff0c;你给我一个文本&#xff0c;我给你一个语言模型出来。 GPT前两代没有什么特别的…

好看的皮囊千篇一律,有趣的书籍万里挑一,学习Java必读的两款书籍推荐

今天给各位学习Java的小伙伴儿们推荐两本Java路线上必不可少的书籍&#xff0c;核心卷1和卷2&#xff0c;大家可根据自己的情况种草。正所谓&#xff0c;书多不压身。 Java核心技术卷1 Java 诞生 27 年来&#xff0c;这本享誉全球的 Java 经典著作《Core Java》一路伴随着 J…

2023年了,快去给你的博客加上一个主题吧~

最近闲逛github&#xff0c;发现了一个不错的博客主题&#xff0c;分享给大家。 这个主题主要是用于博客园的个人主页美化用的。 主题地址&#xff1a;Silence - 专注于阅读的博客园主题 目录 一、获取文件 &#xff08;1&#xff09;样式文件 &#xff08;2&#xff09;脚本…

【机器学习】第二节:线性回归和线性分类

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;机器学习sklearn 描述&#x1f3a8;&#xff1a;本专栏主要分享博主学习机器学习的笔记和一些心得体会。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算…

Linux文件描述符和重定向

介绍 文件描述符是与文件输入、输出相关联的整数&#xff0c;在编写脚本时会经常使用标准的文件描述符来将内容重定向输出&#xff0c;0、1、2是文件描述符&#xff08;分别对应stdin、stdout、stderr&#xff09;&#xff0c;< 、>, >>叫做操作符。 概念 stdin(…