2024.4.29力扣刷题记录-数组篇记录4

目录

一、697. 数组的度

二、448. 找到所有数组中消失的数字

三、442. 数组中重复的数据

四、 41. 缺失的第一个正数

五、485. 最大连续 1 的个数


一、697. 数组的度

哈希表

class Solution:def findShortestSubArray(self, nums: List[int]) -> int:# 哈希表# 找出最大度值第一次出现和最后一次出现的位置# 最大度值可能不止一个hash = {}for i, x in enumerate(nums):# 记录次数,第一次出现位置,最后一次出现位置cnt, first, last = hash.get(x, (0, 0, 0))if cnt == 0:# 第一次出现first, last = i, icnt += 1else:last = i    # 更新最近一次出现的位置cnt += 1hash[x] = (cnt, first, last)# 对值进行排序v = sorted(list(hash.values()), reverse = True)maxCnt, minLen = v[0][0], v[0][2] - v[0][1]for i in range(1, len(v)):# 在最大度值中找最小长度if v[i][0] != maxCnt:breakminLen = min(minLen, v[i][2] - v[i][1])return minLen + 1   #长度是坐标差加一

二、448. 找到所有数组中消失的数字

 1.哈希表

class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:# 哈希表# 时复O(n)ans = []hash = Counter(nums)n = len(nums)for i in range(1, n + 1):if i not in hash.keys():ans.append(i)return ans

2.集合运算

class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:# 集合运算return list(set(range(1, len(nums) + 1)) - set(nums))

3.原地运算,来自官方题解(. - 力扣(LeetCode))。

时复为O(n),无额外空间。太妙了这个方法。题目中的元素范围信息(属于[ 1, n ])也很重要。

class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:# 原地运算# 在原数组上运算,相当于一个数组两用n = len(nums)for num in nums:x = (num - 1) % n# x = num % n - 1     #对于python索引来说是一样的# 但是还是尽量避免出现负数,比如num == n时nums[x] += n    # 通过使用统一额外的值来表示,起到避免更改原数字且储存信息的作用ans = [i + 1 for i, x in enumerate(nums) if x <= n]return ans

三、442. 数组中重复的数据

1.原地操作,类比上一题

class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:# 原地操作n = len(nums)for num in nums:x = (num - 1) % nnums[x] += nreturn [i + 1 for i, x in enumerate(nums) if x > 2 * n]     # 注意是大于,原值是大于等于1的

2.原地操作2,使用正负号标记。来自官方题解(. - 力扣(LeetCode))。

class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:# 原地操作2,使用正负号标记ans = []for x in nums:x = abs(x)if nums[x - 1] > 0:# x第一次出现nums[x - 1] = - nums[x - 1]else:# x第二次出现# 最多只会出现两次所以没问题ans.append(x)return ans

3.原地交换,来自官方题解。

class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:# 原地交换for i in range(len(nums)):# 让x放第x位while  nums[nums[i] - 1] != nums[i]:# 第x位不等于x# 不等代表第一次出现,放到对应位置# 等代表第二次出现,不用管,任意交换到何处都可tmp = nums[i]   # 此处不要直接进行交换nums[tmp - 1], nums[i] = nums[i], nums[tmp - 1]return [x for i, x in enumerate(nums) if x - 1 != i]

这里使用tmp的原因来自评论(. - 力扣(LeetCode))。

四、 41. 缺失的第一个正数

不会,来自官方题解(. - 力扣(LeetCode))。本质是要抓住“对于一个长度为 N 的数组,其中没有出现的最小正整数只能在 [1, N+1] 中。”,再将数字范围进行限制,转化为之前做过的题型。

 1.原地哈希

class Solution:def firstMissingPositive(self, nums: List[int]) -> int:# 对于一个长度为 N 的数组,其中没有出现的最小正整数只能在 [1, N+1] 中# 哈希表# 将无限制改为有限制n = len(nums)for i in range(n):if nums[i] <= 0:nums[i] = n + 1# 做标记for x in nums:x = abs(x)if x <= n:# 只需要管该区域if nums[x - 1] > 0:nums[x - 1] *= -1for i, x in enumerate(nums):if x > 0:return i + 1return n + 1

2.原地置换

class Solution:def firstMissingPositive(self, nums: List[int]) -> int:# 对于一个长度为 N 的数组,其中没有出现的最小正整数只能在 [1, N+1] 中# 原地置换n = len(nums)for i in range(n):# 只将需要放回原位的值放回即可while nums[i] > 0 and nums[i] <= n and nums[nums[i] - 1] != nums[i]:x = nums[i]nums[x - 1], nums[i] = nums[i], nums[x - 1]for i, x in enumerate(nums):if x - 1 != i:return i + 1return n + 1

五、485. 最大连续 1 的个数

1.滑动窗口

class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:# 滑动窗口n = len(nums)ans = 0l, r = 0, 0while l < n:while r < n and nums[l] == nums[r]:r += 1if nums[l] == 1:# 中间都为1时更新ans = max(ans, r - l)l = r   # 直接跳转,中间都是相同的return ans

2.一次遍历,来自官方题解(. - 力扣(LeetCode))。

class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:# 一次遍历maxCnt, cnt = 0, 0for x in nums:if x == 1:cnt += 1else:# 更新maxCnt = max(maxCnt, cnt)cnt = 0# 最后一位maxCnt = max(maxCnt, cnt)return maxCnt

感谢你看到这里!一起加油吧!

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

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

相关文章

智慧旅游驱动行业革新:智能技术引领服务全面升级,匠心打造高品质、个性化旅游新体验

一、引言 随着科技的飞速发展和信息化程度的不断提高&#xff0c;智慧旅游正逐渐成为旅游业发展的新趋势。智慧旅游&#xff0c;顾名思义&#xff0c;是以智能化技术为支撑&#xff0c;通过大数据、云计算、物联网、人工智能等先进技术的应用&#xff0c;实现旅游服务的全面升…

探索PyTorch:开源深度学习框架的魅力

PyTorch作为一款开源深度学习框架&#xff0c;已经在学术界和工业界广泛应用。其简洁易懂的API、动态计算图以及丰富的工具和接口&#xff0c;使得它成为了许多研究人员和工程师的首选。本文将深入探讨PyTorch与深度学习的紧密联系&#xff0c;从其核心特点、应用领域以及未来发…

React Router 路由配置数组配组持久化

在一些特定场景下,你可能需要将路由配置数组进行持久化,例如从后端动态加载路由配置或根据用户权限动态生成路由配置。这时,持久化路由配置数组就很有用,可以避免每次应用启动时重新获取或计算路由配置。 持久化路由配置数组的步骤如下: 定义路由配置数组 首先,你需要定义一…

github fork项目不带tag解决

github中fork别人的项目&#xff0c;clone下来后发现只有代码&#xff0c;没有tag&#xff0c;而我们现在想基于某个tag生成新分支&#xff0c;然后基于这个分支来开发。 第一步&#xff0c;需要把原来的tag都同步过来 # Fork源仓库 # Repo: aaa/project # Fork: bbb/project…

ASR语音转录Prompt优化

ASR语音转录Prompt优化 一、前言 在ASR转录的时候&#xff0c;我们能很明显的感受到有时候语音识别不是很准确&#xff0c;这过程中常见的文本错误主要可以归纳为以下几类&#xff1a; 同音错误&#xff08;Homophone Errors&#xff09; 同音错误发生在不同词语发音相似或相…

使用Postman对@RequestPart和HttpServletRequest组合传参方式

使用Postman对RequestPart和HttpServletRequest组合传参方式 方法代码如下&#xff1a; /*** 发布*/ApiOperation("发布")ApiImplicitParams({ApiImplicitParam(name "req", value "json格式", dataType "Map", dataTypeClass Ma…

【在线名字作画HTML源码】

在线名字作画HTML源码 效果图部分源码领取源码下期更新预报 效果图 部分源码 index.htm <!DOCTYPE html> <html> <head> <title>在线名字作画|民间花鸟字|多彩花鸟虫鱼组合书法|藏字画|字谜语|飞帛板书|意匠文字</title> <meta http-equiv&…

搜维尔科技:Varjo XR-4客户体验中,在VR体验中获得高层次的视觉保真度和沉浸感。

Varjo XR-4系列是Varjo的最新一代头戴式显示器&#xff0c;其代表着世界领先的的混合现实技术和图形处理能力。新一代的XR-4更加迎合工业使用案例&#xff0c;在用户在VR体验中获得高层次的视觉保真度和沉浸感。 搜维尔科技&#xff1a;Varjo XR-4客户体验中&#xff0c;在VR…

HarmaonyOS鸿蒙应用科普课

一、什么是鸿蒙OS&#xff1f; 1.概念&#xff1a; 先给大家讲讲今天讲课的主题&#xff0c;鸿蒙OS是什么&#xff1f;鸿蒙系统大家都知道&#xff0c;就是一个操作系统&#xff0c;我们未来是为的成为鸿蒙程序员。所以我们不要将鸿蒙os完全等同于手机操作系统&#xff0c;太…

华为 huawei 交换机 配置 MUX VLAN 示例(汇聚层设备)

组网需求 在企业网络中&#xff0c;企业所有员工都可以访问企业的服务器。但对于企业来说&#xff0c;希望企业内部部分员工之间可以互相交流&#xff0c;而部分员工之间是隔离的&#xff0c;不能够互相访问。 如 图 6-4 所示&#xff0c; Switch1 位于网络的汇聚层&#xff0…

Nacos 安全零信任实践

作者&#xff1a;柳遵飞 Nacos 作为配置中心经常存储一些敏感信息&#xff0c;但是由于误用导致安全风险&#xff0c;最常见的主要是以下两个问题&#xff1a; 1&#xff09;Nacos 暴露公网可以吗&#xff1f;不可以&#xff0c;因为 Nacos 定位是注册配置中心&#xff0c;是…

ceph笔记 2

一、CephX 认证机制&#xff1a; 看这里 和这里 Cephadm安装Ceph(v17.2.5 Quincy) 1、mon负责认证&#xff0c;mon一定要三个&#xff0c;要不一个坏了以后还咋认证 2、认证完才能对ceph增删改查 3、 在 Ceph 中&#xff0c;这些命令和指令都是与 Ceph 权限控制相关的。让我逐…

Windows命令行基本命令

目录 什么是相对路径和绝对路径&#xff1f; 一、目录&#xff08;文件夹&#xff09;和文件操作 1.cd命令 用于切换目录 2.dir命令 用于显示目录和文件列表 3.md或mkdir命令 创建文件&#xff0c;也可以创建多级子目录 4.rd命令 用于删除目录 5.move命令 用于移动…

C++:拷贝构造函数和赋值运算符重载

目录 一、拷贝构造函数 1.1概念 1.2特征 二、赋值运算符重载 2.1运算符重载 2.2赋值运算符重载 2.2.1赋值运算符重载格式 2.2.2赋值运算符重载要求 2.2.3默认生成的赋值运算符重载 2.3前置和后置重载 一、拷贝构造函数 1.1概念 只有一个形参&#xff0c;这个形参是…

leetcode51.N皇后(困难)-回溯法

思路 都知道n皇后问题是回溯算法解决的经典问题&#xff0c;但是用回溯解决多了组合、切割、子集、排列问题之后&#xff0c;遇到这种二维矩阵还会有点不知所措。 首先来看一下皇后们的约束条件&#xff1a; 不能同行不能同列不能同斜线 确定完约束条件&#xff0c;来看看究…

Python爬虫(入门版)

1、爬虫是什么 简单的来说&#xff1a;就是用程序获取网络上数据。 2、爬虫的原理 如果要获取网络上数据&#xff0c;我们要给爬虫一个网址&#xff08;程序中通常叫URL&#xff09;&#xff0c;爬虫发送一个HTTP请求给目标网页的服务器&#xff0c;服务器返回数据给客户端&am…

jdbc的工具类和三层架构模型

jdbc工具类 由于JDBC的注册驱动&#xff0c;连接数据库&#xff0c;关闭资源的步骤是相同的&#xff0c;所以我们可以写一个JDBC工具类。 /* 工具类&#xff1a; 私有化构造方法 提供静态方法*/ public class jdbcUtil {private final static String DRIVER "com.mysql…

Java设计模式 _创建型模式_建造者模式(Builder)

一、建造者模式 1、建造者模式&#xff08;Builder Pattern&#xff09;是一种创建对象的设计模式。它允许你使用不同的构建策略来创建复杂对象。通常是在复杂类中通过静态内部类&#xff08;Builder&#xff09;来进行构建。 2、实现思路&#xff1a; &#xff08;1&#xf…

异地组网、网络部署、无线覆盖,贝锐蒲公英一步到位

面对网络架构复杂的企业总部&#xff0c;分散在各地的分支机构&#xff0c;以及出差的远程办公人员&#xff0c;如何才能高效异地组网&#xff1f; 为了确保总部、分部网络实现远程稳定、高速互访&#xff0c;以及远程人员安全访问总部业务系统&#xff0c;基于自研SD-WAN的贝…

C++ 小游戏:战斗之旅

一、游戏名称&#xff1a;战斗之旅 游戏规则 角色选择&#xff1a;玩家可以选择不同的角色&#xff0c;每个角色都有不同的属性和技能。商城&#xff1a;玩家可以访问商城购买不同的装备&#xff0c;包括武器和回复物品。战斗&#xff1a;玩家可以与其他角色进行战斗。在战斗…