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

知识储备--基础算法篇-数组

1.学习

2.数组

2.1第53题-最大子数组和

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

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

心得:一直在纠结这个连续的事情,最后发现根本没必要管,因为如果前一个数与当前数相加小于当前数,前面的部分就会直接被舍弃,如果相加大于当前数则会一直叠加。

class Solution(object):def maxSubArray(self, nums):""":type nums: List[int]:rtype: int"""dp = copy.deepcopy(nums)max_ = dp[0]for i in range(1,len(nums)):dp[i] = max(dp[i-1]+nums[i], dp[i])if max_ < dp[i]:max_ = dp[i]return max_

时间和内存占用太多,根本没必要再生成一个dp数组,直接用nums数组更新就行。 

class Solution(object):def maxSubArray(self, nums):""":type nums: List[int]:rtype: int"""# dp = copy.deepcopy(nums)max_ = nums[0]for i in range(1,len(nums)):nums[i] = max(nums[i-1]+nums[i], nums[i])if max_ < nums[i]:max_ = nums[i]return max_

 

2.2第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].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
class Solution(object):def merge(self, intervals):""":type intervals: List[List[int]]:rtype: List[List[int]]"""new_int = []a = []intervals.sort()for i in range(1,len(intervals)):# 前一个end大于后一个startif intervals[i-1][1] > intervals[i][0]:# 前一个end小于后一个endif intervals[i-1][1] <= intervals[i][1]:intervals[i] = [intervals[i-1][0], intervals[i][1]]else:intervals[i] = intervals[i-1]elif intervals[i-1][1] == intervals[i][0]:intervals[i] = [intervals[i-1][0], intervals[i][1]]else:new_int.append(intervals[i-1])new_int.append(intervals[-1])return new_int

2.3第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]
class Solution(object):def rotate(self, nums, k):""":type nums: List[int]:type k: int:rtype: None Do not return anything, modify nums in-place instead."""# if k == 0:#     return numsnums1 = copy.deepcopy(nums)k = k % len(nums)start = len(nums)-k# nums2 = []# nums1 = nums[:start]# nums2 = nums[start:]for i in range(len(nums)):if i < k:nums[i] = nums[start+i]else:nums[i] = nums1[i-k]

感觉不用深拷贝整个数组

class Solution(object):def rotate(self, nums, k):""":type nums: List[int]:type k: int:rtype: None Do not return anything, modify nums in-place instead."""k = k % len(nums)start = len(nums)-knums1 = nums[:start]nums2 = nums[start:]for i in range(len(nums2)):nums[i] = nums2[i]for j in range(len(nums1)):nums[j+k] = nums1[j]

看了答案,发现我最早想出的方法就是最简单的答案,nums[:]=nums[start:]+nums[:start],但是发现一直不能修改nums的值,看了答案发现nums忘记加[:]了,吐了。

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

2.4除自身以外数组的乘积

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

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

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

示例 1:

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

先用最简单的遍历法,果然超时。

class Solution(object):def productExceptSelf(self, nums):""":type nums: List[int]:rtype: List[int]"""len_ = len(nums)answer = [1]*len_for i in range(len_):for j in range(len_):if j != i:answer[i] = answer[i]*nums[j]return answer

 然后把数组分为i点的前半部分和后半部分相乘来计算,这样的话减少很多重复计算的时间。

class Solution(object):def productExceptSelf(self, nums):""":type nums: List[int]:rtype: List[int]"""# 可以把乘积分为前半部分和后半部分len_ = len(nums)answer = [1]*len_forward = [1]*len_back = [1]*len_for i in range(1,len_):forward[i] = forward[i-1]*nums[i-1]for j in reversed(range(len_-1)):back[j] = back[j+1]*nums[j+1]for k in range(len_):answer[k] = forward[k]*back[k]return answer

看了答案,知道了左边的乘积其实可以动态的变化

class Solution(object):def productExceptSelf(self, nums):""":type nums: List[int]:rtype: List[int]"""# 可以把乘积分为前半部分和后半部分len_ = len(nums)answer = [1]*len_back = 1for i in range(1,len_):answer[i] = answer[i-1]*nums[i-1]for j in reversed(range(len_)):answer[j] = answer[j]*backback = back * nums[j]return answer

2.5第41题-缺失的第一个正数

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

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

示例 1:

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

用最朴素的方法来寻找,不出所料,超时。

class Solution(object):def firstMissingPositive(self, nums):""":type nums: List[int]:rtype: int"""for i in range(len(nums)-1):j = 0while j < len(nums)-1-i:if nums[j] > nums[j+1]:temp = nums[j]nums[j] = nums[j+1]nums[j+1] = tempj = j + 1# print(nums)if nums[-1] <= 0:return 1index_1 = 0for j in range(len(nums)):if nums[j] > 0:if nums[j] != 1:return 1else:index_1 = jbreaka = 1# print(index_1)for k in range(index_1+1,len(nums)):a = a + 1if nums[k] == a:continueelif nums[k] == a-1:a = a - 1continueelse:return areturn a + 1

 看了解析,知道当nums长度为N时,正数的数目肯定在[1,N]范围内,这时候就可以用哈希表来查找,内存占用多但速度快。把nums中的数都放在哈希表中,然后遍历[1,N],如果有哈希表中不存在则返回i,若都存在则返回i+1。

class Solution(object):def firstMissingPositive(self, nums):""":type nums: List[int]:rtype: int"""hash_table = set(nums)n = len(nums)a = 0for i in range(1,n+1):if i in hash_table:a = icontinueelse:return ireturn a + 1

相关文章:

知识储备--基础算法篇-数组

1.学习 2.数组 2.1第53题-最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 心得&#xff1a;一直在纠结这个连续的事情&…...

zookeeper 理论合集

目录 系统背景 集群结构 多个节点之间的角色 节点的状态 为什么引入 Observer 存储结构 ZNode 节点结构 ZNode 创建类型 内存数据存储 数据持久化 zookeeper 的容量大小 数据同步 消息广播 崩溃恢复 如何保证顺序一致性 核心流程 Leader 选举流程 脑裂问题 …...

【pyinstaller 怎么打包python,打包后程序闪退 不打日志 找不到自建模块等问题的踩坑解决】

程序打包踩坑解决的所有问题 问题1 多个目录怎么打包 不管你包含多个层目录&#xff0c;引用多么复杂&#xff0c;只需要打包主程序所在文件即可&#xff0c;pyinstaller会自动寻找依赖包&#xff0c;如果报错自建模块找不到&#xff0c;参照问题3 pyinstaller main.py问题2…...

【Docker】网络

文章目录 Docker 网络基础Docker网络管理Docker网络架构CNMLibnetwork驱动 常见的网络类型 Docker 网络管理命令docker network createdocker network inspectdocker network connectdocker network disconnectdocker network prunedocker network rmdocker network ls docker …...

Linux :realpath 命令

以后可以直接用于查找相关文件 例: 输入:realpath .repo/manifests/rv1126_rv1109_linux_release.xml 输出:/home/sdk/work/rk/rv1126_rv1109/.repo/manifests/rv1126_rv1109_linux/rv1126_rv1109_linux_v3.0.2_20230406.xml根据输入的文件找到对应复制过来的型号,这个命令不…...

react17:生命周期函数

挂载时更新时 setState触发更新、父组件重新渲染时触发更新forceUpdate触发更新卸载时 react&#xff08;v17.0.2&#xff09;的生命周期图谱如下。 相较于16版本&#xff0c;17版本生命周期函数有如下变化&#xff1a; componentWillMount() componentWillUpdate() compone…...

腾讯内部单边拥塞算法BBR-TCPA一键脚本安装

TCPA简介 腾讯内部使用的TCPA&#xff0c;由腾讯TEG操作系统组研发&#xff0c;基于RHEL7.4源码&#xff0c;定制化的TCPA。团队介绍&#xff1a;腾讯TEG操作系统组, 2010年成立&#xff0c;专业的内核团队,维护研发腾讯内部linux操作系统tlinux, 保证百万级server高效稳定运行…...

【LLM】chatglm-6B模型训练和推理

本篇文章记录下 chatglm-6B 训练和推理过程 环境&#xff1a;Ubuntu 20.04 1.13.0cu116 chatglm-6B 源代码仓库&#xff1a;链接 chatglm-6B 模型权重&#xff1a;链接 源代码及模型 clone 到本地 这里使用的是 THUDM 在 hugging face 开源的模型。 因为模型比较大&#xff…...

性能可靠it监控系统,性能监控软件的获得来源有哪些

性能可靠的IT监控系统是企业IT运维的重要保障之一。以下是一个性能可靠的IT监控系统应该具备的特点&#xff1a; 高可用性 高可用性是IT监控系统的一个重要特点&#xff0c;它可以保证系统在24小时不间断监控的同时&#xff0c;保证系统服务的可用性和稳定性。为了实现高可用性…...

TCP/IP网络编程(一) 理解网络编程和套接字

文章目录 理解网络编程和套接字网络编程和套接字概要构建套接字编写 Hello World 服务器端构建请求连接套接字在Linux平台下运行 基于Linux的文件操作打开文件关闭文件将数据写入文件读取文件中的数据 理解网络编程和套接字 网络编程和套接字概要 网络编程就是编写程序使两台…...

Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程

你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。标题取自其中三则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。 本周刊由 Python猫 出品&#xff0c;精心筛选国内外的 250 信息源&#xff0c;为你挑选…...

装备一台ubuntu

配置远程连接&#xff1a; ubuntu的root用户无法远程登入问题&#xff1a; openssh安装命令&#xff1a; sudo apt-get install openssh-server 安装完成通过以下命令查看SSH是否启动 ps -e | grep ssh 如果只有ssh-agent表示还没启动&#xff0c;需要&#xff1a; /etc/i…...

为了更好和大家交流,欢迎大家加我的微信账户

因为一些懂的都懂的原因&#xff0c;如果我的账户显示为 此时我无法通过站内信、留言或者任何方式和大家联系。 如果看到这样的内容&#xff0c;可以在此评论区留下你的微信账户&#xff0c;我看到后会添加你。为防止其他人冒充我&#xff0c;我的微信号以2206结尾。...

MS1826A HDMI 多功能视频处理器 HDMI4进1出画面分割芯片

基本介绍 MS1826A 是一款多功能视频处理器&#xff0c;包含 4 路独立 HDMI 音视频输入通道、1 路 HDMI 音视 频输出通道以及 1 路独立可配置为输入或者输出的 SPDIF、I2S 音频信号。支持 4 个独立的字库定 制型 OSD&#xff1b;可处理隔行和逐行视频或者图形输入信号&#xff1…...

最新文献怎么找|学术最新前沿文献哪里找

查找下载最新文献最好、最快、最省事的方法就是去收录该文献的官方数据库中下载。举例说明&#xff1a; 有位同学求助下载一篇2023年新文献&#xff0c;只有DOI号10.1038/s41586-023-06281-4&#xff0c;遇到这种情况可以在DOI号前加上http://doi.org/输入地址栏查询该文献的篇…...

ctfshow 红包题

前言&#xff1a; 最近一直在搞java很少刷题&#xff0c;看见ctfshow的活动赶紧来复现一波~ ctfshow 红包挑战7 <?php highlight_file(__FILE__); error_reporting(2); extract($_GET); ini_set($name,$value); system("ls ".filter($_GET[1])."" )…...

SpringBoot项目(jar)部署,启动脚本

需求 SpringBoot项目&#xff08;jar&#xff09;部署&#xff0c;需要先关闭原来启动的项目&#xff0c;再启动新的项目。直接输入命令&#xff0c;费时费力&#xff0c;还容易出错。所以&#xff0c;使用脚本启动。 脚本 脚本名&#xff1a;start.sh 此脚本需要放置在jar包…...

大数据(四)主流大数据技术

大数据&#xff08;四&#xff09;主流大数据技术 一、写在前面的话 To 那些被折磨打击的好女孩&#xff08;好男孩&#xff09;&#xff1a; 有些事情我们无法选择&#xff0c;也无法逃避伤害。 但请你在任何时候都记住&#xff1a; 你可能在一些人面前&#xff0c;一文不值&a…...

【已解决】激活虚拟环境报错:此时不应有Anaconda3\envs\[envs]\Library\ssl\cacert.pem。

新建虚拟环境后&#xff0c;进入虚拟环境的时候出现这样的报错&#xff1a; 此时不应有Anaconda3 envs yolov5 Library ssl cacert.pem。 但是之前装的虚拟环境也还能再次激活&#xff0c;base环境也无任何问题&#xff0c;仅新装的虚拟环境无法激活。 查遍了百度谷歌&#xff…...

Vue安装过程的困惑解答——nodejs和vue关系、webpack、vue-cli、vue的项目结构

文章目录 1、为什么在使用vue前要下载nodejs&#xff1f;2、为什么安装nodejs后就能使用NPM包管理工具&#xff1f;3、为什么是V8引擎并且使用C实现&#xff1f;4、为什么会安装淘宝镜像&#xff1f;5、什么是webpack模板&#xff1f;6、什么是脚手架 vue-cli&#xff1f;6.1 安…...

VictoriaMetrics 集群版实战指南:架构解析与最佳实践

1. VictoriaMetrics集群版架构深度解析 第一次接触VictoriaMetrics集群版时&#xff0c;我被它简洁的组件划分惊艳到了。与常见的时序数据库不同&#xff0c;它的三大核心组件vmstorage、vminsert、vmselect各司其职&#xff0c;这种设计让横向扩展变得异常灵活。在实际部署中&…...

DFRobot URM07超声波传感器UART通信与温度补偿详解

1. DFRobot URM07超声波测距传感器技术深度解析1.1 产品定位与工程价值DFRobot URM07&#xff08;SKU: SEN0153&#xff09;是一款面向嵌入式系统设计的工业级超声波距离传感器模块&#xff0c;其核心价值在于将高精度测距、环境温度补偿、超低功耗与UART标准化接口四者深度融合…...

从“动态规划”到“强化学习”:贝尔曼方程的前世今生与核心思想

从“动态规划”到“强化学习”&#xff1a;贝尔曼方程的前世今生与核心思想 1953年&#xff0c;美国数学家理查德贝尔曼在兰德公司研究导弹防御系统时&#xff0c;面对复杂的多阶段决策问题&#xff0c;提出了一个革命性的数学工具——动态规划。这个诞生于冷战背景下的理论&am…...

大厂高薪抢手!文科生如何抓住AI时代机遇,实现职业逆袭?

大厂纷纷高薪招聘文科生&#xff0c;引发社会关注。文科生凭借沟通、叙事、逻辑等优势&#xff0c;在大模型理解人类价值观、企业品牌宣传等方面发挥作用。高校也调整专业设置&#xff0c;培养跨学科人才。文章建议文科生根据自身专业&#xff0c;向文案策划、品牌宣传、法务、…...

【数值分析】线性方程组求解的MATLAB实战:从高斯消元到追赶法

1. 线性方程组求解的数值方法概述 在工程计算和科学研究中&#xff0c;线性方程组的求解是一个基础而重要的问题。想象一下&#xff0c;你正在设计一座桥梁&#xff0c;需要计算各个节点的受力情况&#xff1b;或者你在分析电路时&#xff0c;需要确定各个支路的电流大小。这些…...

网站 SEO 标题要包含关键词吗

网站 SEO 标题要包含关键词吗&#xff1f;探讨最佳实践和SEO优化策略 在当今互联网时代&#xff0c;网站的SEO优化已经成为提升网站流量和用户体验的重要手段。其中&#xff0c;网站标题的优化也至关重要。网站 SEO 标题要包含关键词吗&#xff1f;这个问题备受争议&#xff0c…...

国产N32芯片开发避坑指南:J-Link在Keil中的特殊配置(含Cortex-M0配置模板)

国产N32芯片开发实战&#xff1a;J-Link调试配置深度解析与Keil环境优化 在国产MCU生态快速崛起的背景下&#xff0c;N32系列芯片凭借优异的性价比和本土化服务优势&#xff0c;正逐步成为工程师替代进口方案的新选择。然而&#xff0c;从传统ST芯片转向国产平台时&#xff0c;…...

开源新形态:从代码到Prompt的转变

【导语&#xff1a;3月末&#xff0c;开源作者yetone发布新项目voice-input-src&#xff0c;以独特方式“开源”&#xff0c;即用自然语言Prompt生成代码&#xff0c;此做法引发讨论&#xff0c;或预示开源模式新转变。】AI驱动的语音输入法开源项目开源作者yetone在GitHub上发…...

106. 如何禁用牧场主日志的注释收集

Environment 环境 SUSE Rancher Prime - All versions SUSE Rancher Prime - 所有版本 Rancher-logging-105.3.x Procedure 程序 There could be situations where users might want to disable annotation collection with rancher-logging in order to reduce the amount o…...

施密特触发器在智能家居中的7个隐藏用法:从空调变频到漏电保护

施密特触发器在智能家居中的7个隐藏用法&#xff1a;从空调变频到漏电保护 智能家居的普及让我们的生活更加便捷&#xff0c;但背后支撑这些设备的电子技术却鲜为人知。施密特触发器作为一种基础的电子元件&#xff0c;在智能家居系统中扮演着关键角色。它不仅能解决信号抖动问…...