leetcode-hot100-普通数组

53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组

是数组中的一个连续部分。

示例 1:

**输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

类似于动态规划方法,dp[i]表示以i结尾的元素的最大子数组和。状态转移方程:
dp[i]=max(dp[i-1] + nums[i], nums[i])
dp[0]=nums[0]

class Solution:def maxSubArray(self, nums: List[int]) -> int:dp = [0] * len(nums)dp[0] = nums[0]result = nums[0]for i in range(1, size):dp[i] = max(dp[i-1]+nums[i], nums[i])result = max(result, dp[i])return result

dp[i]的计算和dp[i-1], nums[i]有关,也可以把dp数组去掉,使用pre、cur来代替,pre=dp[i-1], cur=dp[i],节省空间。

56. 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间

示例 1:

**输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

先对原数组intervals按照每个pair的第一个元素按照升序排序,遍历排序后的数组,同时将一个元素加到结果数组res中;当遍历到非第一个元素时,比较res数组的最后一个区间的右边界和当前区间的左边界,如果重合,即res[-1][1] < intervals[i][0], 进行区间合并,将res中最后一个区间的右边界更新为当前元素的右边界;如果不重合,直接加入到结果数组中。

区间合并:比如说intervals = [[1,4], [2,3]], 完全包围
res[-1][1] = max(intervals[i][1], res[-1][1])

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals = sorted(intervals, key=lambda x: x[0])res = [intervals[0]]for i in range(1, len(intervals)):if intervals[i][0] <= res[-1][1]:res[-1][1] = max(intervals[i][1], res[-1][1])else:res.append(intervals[i])return res

对于append来说,可以把intervals[0]的操作和非重合操作合并起来,合并后的代码:

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key = lambda x : x[0])merged = []for i in intervals:# 数组为空 or 区间不重合if not merged or merged[-1][1] < i[0]:merged.append(i)else:merged[-1][1] = max(i[1], merged[-1][1])return merged

189. 轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

利用python的数组切片,切片后的数组直接拼接得到最终结果。
num[:] = aaa, 实现数组的原地修改,而不是直接赋值—导致nums的地址改变。

class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""k = k % len(nums)nums[:] = nums[-k:] + nums[:-k]

想办法通过数学运算推导出每个元素的最终位置,通过建立一个映射关系,遍历一次数组直接得到最终答案。

首先,要考虑k和N的关系,k有可能大于N,这个时候要对k = k % N,去除非必要操作。
(i + k) % N
arr_nums[(i + k) % N] = nums[i]
使用一个辅助数组,最后将辅助数组的顺序赋值给nums,实现原地修改。

另一种方法,通过多次翻转实现。

  1. reverse(nums) 7 6 5 4 3 2 1
  2. reverse(nums[:k %N]) 5 6 7 4 3 2 1
  3. reverse(nums[k %N:]) 5 6 7 1 2 3 4

238. 除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 **不要使用除法,且在 O(_n_) 时间复杂度内完成此题。

示例 1:

输入: nums = [1,2,3,4]
输出: [24,12,8,6]

不能使用除法,如果可以使用除法,我们可以计算一个乘积,同时结合当前元素是否为0特判。另一种思路,双层循环,result[i] = ply[0:i] * ply[i+1: ], 即按照本身定义计算,但是时间复杂度比较高。为了进行优化,可以使用另外的数组,存储lply[i] , rply[i+1:].


class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:n=len(nums)L,R,ans=[0]*n,[0]*n,[0]*nL[0]=1for i in range(1,n):L[i]=L[i-1]*nums[i-1]  #i左边的乘积R[n-1]=1for i in reversed(range(n-1)):R[i]=R[i+1]*nums[i+1]  #i右边的乘积for i in range(n):ans[i]=L[i]*R[i]return ansclass Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:res = [1] * len(nums)for i in range(1, len(nums)):res[i] = res[i - 1] * nums[i - 1]suf = 1for i in range(len(nums) - 1, -1, -1):res[i] *= sufsuf *= nums[i] return res

41. 缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

**输入:nums = [1,2,0]
输出:3
解释:范围 [1,2] 中的数字都在数组中。

一种思路,for循环,遍历 1~N+1,判断是否在数组中,如果不再返回即可。另一种思路,置换法,理解为将数组排序后,理论上 i 下 值为 i+1,即nums[i]应该出现在下标i+1上,最后依次遍历找到第一个不符合关系的元素。

class Solution:def firstMissingPositive(self, nums: List[int]) -> int:n = len(nums)for i in range(n):while 1 <= nums[i] <= n and nums[nums[i] - 1] != nums[i]:# 这是错误的# nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]for i in range(n):if nums[i] != i + 1:return i + 1return n + 1

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

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

相关文章

IOS覆盖率报告info文件解读

一&#xff0c;IOS覆盖率报告的生成 在做前端精准测试的时候&#xff0c;对于iOS端&#xff0c;通常会做如下操作&#xff1a; &#xff08;1&#xff09;合并覆盖率数据 如下操作&#xff1a; xcrun llvm-profdata merge coverage_file1657885040728.profraw coverage_fil…

LeetCode刷题日志-17.电话号码的字母组合

纯暴力解法&#xff0c;digits有多长&#xff0c;就循环多少次进行字母组合 class Solution {public List<String> letterCombinations(String digits) {List<String> reslut new ArrayList<>();if(digits.equals(""))return reslut;Map<Inte…

2024年科技前瞻:AI辅助研发引领未来创新浪潮

2024 年 AI 辅助研发趋势随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI正逐渐渗透到研发的各个环节&#xff0c;变革着传统的研发模式。在这一背景下&am…

视图【MySQL】

文章目录 概念操作视图创建视图查询视图更新视图删除视图 视图规则和限制 概念 MySQL 中的视图&#xff08;View&#xff09;是一个虚拟表&#xff0c;其内容由查询定义。视图本身不包含数据&#xff0c;这些数据是从一个或多个实际表中派生出来的&#xff0c;通过执行视图定义…

LLM RAG系统中消除数据幻觉的几个绝招-OPENAI公司内称的“大招”

前言-什么是数据幻觉&#xff1f;它到底有什么危害呢 我们直接来举例&#xff1a; 我是金银花一区的&#xff0c;附近有什么小学&#xff1f; 此时RAG带出如下信息&#xff1a; 金银花小区一区、二区、三区附近教育资源有&#xff1a;银树大学、建设小学金银花校区、金树高…

使用Python模拟绘制自由落体运动过程中的抛物线

目录 一、引言 二、自由落体运动的基本原理 三、使用Python模拟自由落体运动 四、扩展功能&#xff1a;添加速度曲线和动画效果 五、总结与展望 一、引言 自由落体运动是物理学中最基础的运动形式之一&#xff0c;它描述了一个物体在仅受重力作用下的运动轨迹。在这个…

Django工具

一、分页器介绍 1.1、介绍 分页,就是当我们在页面中显示一些信息列表,内容过多,一个页面显示不完,需要分成多个页面进行显示时,使用的技术就是分页技术 在django项目中,一般是使用3种分页的技术: 自定义分页功能,所有的分页功能都是自己实现django的插件 django-pagin…

Charles无法打开导出的har文件解决方法

打开出错&#xff1a;MalformedJson: Use JsonReader.setLenient(true) to accept malformed JSON at line1 column 1368184 path $.log.entries[41].request.postData.text 一、解决办法 用json.dumps格式化一下里面内容&#xff0c;保存为新文件再打开 import jsondef modify…

springboot260火锅店管理系统

火锅店管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装火锅店管理系统软件来发挥其高效…

SpringBoot整合Minio的详细步骤

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 minio 是对象存储服务。它基于 Apache License 开源协议&#xff0c;兼容 Amazon S3 云存储接口。适合存储非结构化数据&#xff0c;如图片&#xff0c;音频&#xff0c;视频&#xff0c;日志等。对象…

方法的使用

1.什么是方法(method) 在java中方法就是一个代码片段.。几乎相当于c语言的函数。 2.方法定义 方法跟函数是几乎一样的。所以语法是大差不差的。就多了一点东西。之前我们在c语言里已经很详细讲过了函数。这里就简便的讲一下。 相比c语言函数多了个修饰符 。 现在看下其注意…

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型 Shepard模型(简称SP模型)就是一种直观的、可操作的相似预测法&#xff0c;常用于插值。相似预测法基本原理按照相似原因产生相似结果的原则&#xff0c;从历史样本中集中找出与现在的最相似的一…

OSPF收发报文实验简述

1、OSPF采用组播形式收发报文&#xff0c;这样可以减少对其它不运行OSPF路由器的影响。 通过wireshark软件对r2 e0/0/0 端口进行数据抓包&#xff0c;发现224.0.0.5为组播地址&#xff0c;如下图

每日OJ题_牛客WY28 跳石板(动态规划)

目录 牛客WY28 跳石板 解析代码 牛客WY28 跳石板 跳石板_牛客题霸_牛客网 解析代码 #include <iostream> #include <vector> #include <climits> #include <cmath> using namespace std;void get_div_num(int n, vector<int>& arr) {for…

个人博客系列-后端项目-RBAC角色管理(6)

修改上一篇文章创建的用户表 ## 用户表 from django.contrib.auth.hashers import make_password, check_password from django.contrib.auth.models import AbstractBaseUserclass User(AbstractBaseUser):username models.CharField(max_length255, uniqueTrue, verbose_na…

React-useEffect

1.概念 说明&#xff1a;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送 A列AX请求&#xff0c;更改DOM等。 2.案例 // useEffect用于组件不是由事件引起的而是由渲染本身引起的操作&#xff0c;如ajax,更改Dom等。 import { useEffect,…

数学建模-敏感度分析(美赛)

从多个不确定性因素中逐一找出对投资项目经济效益指标有重要影响的敏感性因素&#xff0c;并分析、测算其对项目经济效益指标的影响程度和敏感性程度&#xff0c;进而判断项目承受风险的能力。若某参数的小幅度变化能导致经济效益指标的较大变化&#xff0c;则称此参数为敏感性…

Spring Boot整合MyBatis Plus配置多数据源

Spring Boot 专栏&#xff1a;https://blog.csdn.net/dkbnull/category_9278145.html Spring Cloud 专栏&#xff1a;https://blog.csdn.net/dkbnull/category_9287932.html GitHub&#xff1a;https://github.com/dkbnull/SpringBootDemo Gitee&#xff1a;https://gitee.com/…

macOS系统浏览器设置“检查元素“功能

目录 第一步 点击Safari浏览器&#xff0c;选择"设置" 第二步 选择高级&#xff0c;参照下图勾选"在菜单栏中显示开发菜单" 类似于windows系统的f12快捷键。Mac默认是不支持f12的&#xff0c;右键也没有"检查元素"&#xff0c;如果需要使用&am…

探索Redis CLI:功能强大的Redis命令行工具及其应用场景

Redis CLI&#xff08;Command Line Interface&#xff09;是一种与Redis服务器进行交互的命令行工具&#xff0c;提供了丰富的功能和灵活的命令&#xff0c;方便用户执行各种数据操作和管理任务。以下是Redis CLI的一些常见用法和功能&#xff1a; 1. 连接到Redis服务器 要连…