力扣hot100题解(python版96-100题)

96、只出现一次的数字

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

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

示例 1 :

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

示例 2 :

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

示例 3 :

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

提示:

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • 除了某个元素只出现一次以外,其余每个元素均出现两次。

思路解答:

1、任何数和 0 做异或运算,结果仍然是原来的数:a ⊕ 0 = a

2、任何数和其自身做异或运算,结果为 0:a ⊕ a = 0

3、异或运算满足交换律和结合律:a ⊕ b ⊕ a = (a ⊕ a) ⊕ b = 0 ⊕ b = b

因此,对数组中的所有元素进行异或运算,最终的结果就是只出现一次的元素。

def singleNumber(nums: list[int]) -> int:result = 0for num in nums:result ^= numreturn result

97、多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

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

示例 2:

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

提示:

  • n == nums.length
  • 1 <= n <= 5 * 104
  • -109 <= nums[i] <= 109

**进阶:**尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

思路解答:

假设数组的第一个元素是多数元素,然后遍历数组,对于每个元素进行投票,如果遇到相同的元素就加一票,否则减一票。当票数减为0时,就将当前元素设为候选多数元素。

由于多数元素出现的次数大于n/2,所以最终剩下的候选多数元素一定是多数元素。

def majorityElement(nums: list[int]) -> int:candidate = Nonecount = 0for num in nums:if count == 0:candidate = numcount += 1 if num == candidate else -1return candidate

98、颜色分类

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 012 分别表示红色、白色和蓝色。

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

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

示例 2:

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

提示:

  • n == nums.length
  • 1 <= n <= 300
  • nums[i]012

进阶:

  • 你能想出一个仅使用常数空间的一趟扫描算法吗?

思路解答:

1、使用三个指针:left、right 和 curr,其中left指向当前已经排好的 0 的右边界,right指向当前已经排好的 2 的左边界,curr用于遍历数组。

2、遍历数组,若nums[curr]等于0,则与nums[left]交换元素,然后curr和left指针右移;若nums[curr]等于2,则与nums[right]交换元素,然后right指针左移;若nums[curr]等于1,则curr指针右移。

3、遍历结束后,数组就会按照红、白、蓝的顺序排列。

def sortColors(nums: list[int]) -> None:left, right, curr = 0, len(nums) - 1, 0while curr <= right:if nums[curr] == 0:nums[curr], nums[left] = nums[left], nums[curr]curr += 1left += 1elif nums[curr] == 2:nums[curr], nums[right] = nums[right], nums[curr]right -= 1else:curr += 1

99、下一个排列

整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。

  • 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3][1,3,2][3,1,2][2,3,1]

整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。

  • 例如,arr = [1,2,3] 的下一个排列是 [1,3,2]
  • 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2]
  • arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。

给你一个整数数组 nums ,找出 nums 的下一个排列。

必须 原地 修改,只允许使用额外常数空间。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100

思路解答:

  1. 从右向左遍历数组,找到第一个降序的位置i,即找到第一个满足nums[i] < nums[i+1]的位置i。
  2. 在位置i的右侧找到大于nums[i]的最小元素,将其与位置i的元素交换。
  3. 将位置i右侧的元素按升序排列,以得到下一个排列。
def nextPermutation(nums: list[int]) -> None:n = len(nums)i = n - 2# 找到第一个降序的位置iwhile i >= 0 and nums[i] >= nums[i + 1]:i -= 1if i >= 0:j = n - 1# 找到大于nums[i]的最小元素while nums[j] <= nums[i]:j -= 1nums[i], nums[j] = nums[j], nums[i]# 将位置i右侧的元素按升序排列left, right = i + 1, n - 1while left < right:nums[left], nums[right] = nums[right], nums[left]left += 1right -= 1

100、寻找重复数

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1n),可知至少存在一个重复的整数。

假设 nums 只有 一个重复的整数 ,返回 这个重复的数

你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。

示例 1:

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

示例 2:

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

示例 3 :

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

提示:

  • 1 <= n <= 105
  • nums.length == n + 1
  • 1 <= nums[i] <= n
  • nums只有一个整数 出现 两次或多次 ,其余整数均只出现 一次

进阶:

  • 如何证明 nums 中至少存在一个重复的数字?
  • 你可以设计一个线性级时间复杂度 O(n) 的解决方案吗?

思路解答:

  1. 定义快慢指针,快指针每次移动两步,慢指针每次移动一步。
  2. 首先,让快慢指针相遇,相遇点一定在环内。
  3. 然后,将快指针移到起点,快慢指针以相同速度移动,再次相遇的地方就是环的入口点。
def  findDuplicate(nums: list[int]) -> int:slow = nums[0]fast = nums[0]while True:slow = nums[slow]fast = nums[nums[fast]]if slow == fast:breakfast = nums[0]while slow != fast:slow = nums[slow]fast = nums[fast]return slow

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764003.shtml

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

相关文章

Spring学习记录之面向切面编程

AOP&#xff08;面向切面编程&#xff09;是一种编程思想&#xff0c;其作用在于在不改变其原始设计的基础上进行功能增强。这也是Spring的开发理念&#xff1a;无侵入式编程。其实&#xff0c;这是一种代理思想&#xff0c;事实上&#xff0c;SpringAOP是动态代理的一种形式。…

一站式App流量统计,Xinstall助您洞悉用户行为

在如今的移动互联网时代&#xff0c;App的推广和运营对于开发者来说至关重要。然而&#xff0c;想要精准掌握App的流量情况&#xff0c;却并不是一件容易的事情。这时&#xff0c;一款强大的App流量统计工具就显得尤为重要。而Xinstall&#xff0c;正是这样一款能够帮助开发者轻…

优惠:阿里云4核16G服务器优惠价格26.52元1个月、149.00元半年

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年&#xff0c;配置为阿里云服务器ECS经济型e实例ecs.e-c1m4.xlarge&#xff0c;4核16G、按固定带宽 10Mbs、100GB ESSD Entry系统盘&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接打开如下图&a…

项目实战-开发工具入门/基本框架搭建/项目初始化/引入组件库

上周更新完了之前vue3的shopping项目&#xff0c;接下来&#xff0c;将会开启一个新的项目&#xff0c;效果是类似于移动端的一个伙伴匹配项目&#xff0c;今天这篇文章从需求分析到架构设计再到项目初始化&#xff0c;基本框架搭建几个部分来为大家详细介绍。 从这个项目开始…

流程引擎表单引擎有哪几个方面的优势?

想要在信息科技迅猛发展的时代中&#xff0c;拥有强劲的市场竞争力&#xff0c;随时捕捉市场发展动态&#xff0c;获得长久发展&#xff0c;就需要正确掌握优质的发展技术平台&#xff0c;为企业可持续发展注入新鲜动力。低代码技术平台、流程引擎表单引擎的兴盛发展是推动各中…

UI功能6大流程、接口测试8大流程这些你真的全会了吗?

在讲接口流程测试之前&#xff0c;首先需要给大家申明下&#xff1a;接口测试对于测试人员而言&#xff0c;非常非常重要&#xff0c;懂功能测试接口测试&#xff0c;就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试&#xff0c;一般也是面试笔试必问。为方便大家更…

一些 AI 工具

AI 搜索&#xff1a;Phind&#xff0c;perplexity AI聊天大模型&#xff1a;chatgpt&#xff0c; kimi&#xff08;国内可用&#xff0c;支持上传文件&#xff09; AI 机器人&#xff1a;https://www.coze.com/ AI工具集&#xff1b;https://ai-bot.cn/#term-2 agent GPT&a…

打开windowsmac系统自带画图工具的方法

windows系统&#xff1a; 方法1:使用搜索栏 点击任务栏左侧的搜索图标&#xff08;放大镜图标&#xff09;。在搜索栏中键入“画图”或“Paint”。在搜索结果中&#xff0c;会显示“画图”应用程序。点击它即可打开。 方法2&#xff1a;使用运行命令&#xff1a; 按下Win …

【什么是多态】从用c语言实现多态开始,解剖多态的核心

什么是多态性&#xff1f; 多态性源自希腊语&#xff0c;意为“多种形态”。在编程领域&#xff0c;多态性表示同一操作或消息可以应用于不同类型的对象&#xff0c;而产生不同的行为。这种行为基于对象的类型和方法的实现方式而异&#xff0c;但对于调用方来说&#xff0c;它…

大数据--hdfs--java编程

环境&#xff1a; virtualbox ubantu1604 Linux idea社区版2023 jdk1.8 hadoop相关依赖 使用java操作 1. 判断/user/stu/input/test.txt文件是否存在&#xff0c;存在则读出文件内容&#xff0c;打印在控制台上。反之&#xff0c;输出“文件不存在”。 package abc;impo…

二进制文件和为文本文件

二进制文件和为文本文件 根据数据的组织形式&#xff0c;数据文件被称为文本文件或者二进制文件。 数据在内存中以⼆进制的形式存储&#xff0c;如果不加转换的输出到外存的文件中&#xff0c;就是二进制文件。 如果要求在外存上以ASCII码的形式存储&#xff0c;则需要在存储前…

零成本使用Grass赚钱,简化教程,一学就会

文章目录 第一步&#xff1a;注册账户第二步&#xff1a;安装Grass Chrome插件1、离线安装&#xff08;推荐&#xff09;2、在线安装&#xff08;有外力的话推荐&#xff09; 第三步&#xff1a;登录Grass插件第四步&#xff1a;Grass开始运行结语 第一步&#xff1a;注册账户 …

计算机二级大题

题目来源&#xff1a;计算机二级Python半个月抱佛脚大法&#xff08;内呈上真题版&#xff09; - 知乎 1.大题1 注意csv文件读取的处理 ls[] for line in f: ls.append(line.strip(\n).split(,)) 2. 大题2 第一问&#xff1a; #计算有效票张数 fopen("vote.txt",…

wordpress给指定ID分类添加特定的字段

要在WordPress中为不同的分类添加特定的字段&#xff0c;您可以使用自定义字段&#xff08;Custom Fields&#xff09;功能。以下是一种方法&#xff0c;通过编写自定义的函数来实现。 首先&#xff0c;您需要创建一个自定义的函数来添加特定的字段。您可以在WordPress主题的f…

数据挖掘与机器学习 1. 绪论

于高山之巅&#xff0c;方见大河奔涌&#xff1b;于群峰之上&#xff0c;便觉长风浩荡 —— 24.3.22 一、数据挖掘和机器学习的定义 1.数据挖掘的狭义定义 背景&#xff1a;大数据时代——知识贫乏 数据挖掘的狭义定义&#xff1a; 数据挖掘就是从大量的、不完全的、有噪声的、…

【群晖】Docker Compose部署 Emby Server

【群晖】Docker Compose部署 Emby Server 本来群晖上面的 Emby 是用套件安装的&#xff0c;但是不巧的是前两天脑袋一抽装了两个插件&#xff0c;导致 Emby Server被当肉鸡了&#xff0c;还找不到脚本代码在哪儿&#xff0c;一天时间上传了3T的流量。无奈之下&#xff0c;只能尝…

【python绘图colorbar对齐】

[Toc]# 1、问题描述 python在绘图过程中&#xff0c;可能会出现colorbar高度与主图不匹配情况&#xff0c;需要进行调整&#xff0c;使得与主图高度对齐&#xff0c;使图像更美观。示例&#xff1a;colorbar位置高于主图 2、解决方法 通过调整shrink参数匹配对齐,pad调整x轴…

数据库范式--一起学习吧之数据库

一、数据库范式分类 数据库范式是关系数据库中的关系必须满足的规范化要求&#xff0c;主要用于减少数据冗余、提高数据的一致性和完整性。目前数据库范式主要有六种&#xff0c;从低到高依次是&#xff1a;第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&…

《妈妈是什么》笔记(二) 让孩子自己做选择

经典摘录 孩子也会需要独立的空间做事情&#xff0c;求独立、求空间、求私隐 对于不管因为什么&#xff0c;别人在受到肯定和赞赏的时候&#xff0c;会对我们自己的心理带来因“比较”而产生的不适感甚至嫉妒感&#xff0c;进而在行为上影响了我们自己的节奏&#xff0c;产生一…

如何系统地自学Python

如何系统地自学Python 大家好&#xff01;今天&#xff0c;我要和大家聊聊一个老生常谈但又永不过时的话题——如何系统地自学Python。Python&#xff0c;这个既简单又强大的编程语言&#xff0c;已经成为许多初学者入门编程的首选。但问题来了&#xff0c;面对海量的学习资源…