力扣hot100_普通数组_python版本

力扣hot100_普通数组_python版本

一、53. 最大子数组和

在这里插入图片描述
  • 思路1:前缀和。
  • 代码
classSolution:defmaxSubArray(self, nums: List[int])->int:iflen(nums)==1:return nums[0] preSum =[0]*(len(nums)+1)for idx, n inenumerate(nums): preSum[idx+1]= preSum[idx]+ n res =-inf for idx, p inenumerate(preSum):for i inrange(idx): res =max(res, p-preSum[i])return res # 前缀和比较好写,但是上面复杂度太高,没法AK# 其实每次我们只需要减去最小的前缀和,维护一个最小的前缀和,就不需要多一层循环。优化如下classSolution:defmaxSubArray(self, nums):iflen(nums)==1:return nums[0] res =-inf preSum =0 minPreSum =0for n in nums: preSum += n res =max(res, preSum - minPreSum) minPreSum =min(minPreSum, preSum)return res 
  • 思路2:dp
    • 定义dp[i],表示以nums[i]j结尾的最大子数组和。当来到第i个位置,有两种可能
    1. 以dp[i] = nums[i],单独成一个子数组
    2. dp[i] = dp[i-1] + nums[i],这种情况需要dp[i-1] >=0
  • 代码
classSolution:defmaxSubArray(self, nums): dp =[0]*len(nums) dp[0]= nums[0]for i inrange(1,len(nums)): dp[i]=max(dp[i-1],0)+ nums[i]returnmax(dp)

二、56. 合并区间

在这里插入图片描述
  • 思路:先将intervals中的区间按起始排序。这样每个新来的区间就不用和已经确定好没要交集的区间比较了。
  • 代码
classSolution:defmerge(self, intervals: List[List[int]])-> List[List[int]]: intervals.sort(key=lambda p:p[0]) res =[]for p in intervals:if res and p[0]<= res[-1][1]: res[-1][1]=max(ans[-1][1], p[1])else:# 这是第一个区间 或者 新来的区间和之前的区间没有交集 res.append(p)return res 

三、189. 轮转数组

在这里插入图片描述
  • 思路:这道题可以推公式出来,如果不想推的话直接根据结果反转。注意不要使用切片或者列表的insert语法。这都会产生额外的空间
  • 代码1:
classSolution:defrotate(self, nums: List[int], k:int)->None:defreverse(i, j):while i < j: nums[i], nums[j]= nums[j], nums[i] i +=1 j -=1 n =len(nums) k %= n # 防止k比数组大 reverse(0, n-1) reverse(0, k-1) reverse(k, n-1)
  • 代码2:使用python自带的reverse语法
defrotate2(self, nums: List[int], k:int)->None:# python也有自带的reverse语法 n =len(nums) k %= n nums.reverse() nums[:k]=reversed(nums[:k]) nums[k:]=reversed(nums[k:])

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

在这里插入图片描述
  • 思路:前后缀分解。维护一个pre[i]:表示0到i-1的乘积,suf[i]表示i+1到n-1的乘积。
  • 代码
classSolution:defproductExceptSelf(self, nums: List[int])-> List[int]: n =len(nums) pre =[1]*n for i inrange(1, n): pre[i]= pre[i-1]* nums[i-1] suf =[1]*n for i inrange(n-2,-1,-1): suf[i]= suf[i+1]* nums[i+1]return[p * s for p, s inzip(pre, suf)]

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

在这里插入图片描述
  • 思路:将每个数字放到自己值对应的索引上
  • 代码:
classSolution:deffirstMissingPositive(self, nums: List[int])->int: n =len(nums)for i inrange(n):# 当前数字大小在列表范围内且没有放到对应的索引位置上。while1<= nums[i]<= n and nums[nums[i]-1]!= nums[i]: nums[nums[i]-1], nums[i]= nums[i], nums[nums[i]-1]for i inrange(n):if nums[i]!= i +1:return i +1# 如果都对上了return n +1

Read more

Linux网络 | 理解Web路径 以及 实现一个简单的helloworld网页

Linux网络 | 理解Web路径 以及 实现一个简单的helloworld网页

前言:本节内容承接上节课的http相关的概念, 主要是实现一个简单的接收http协议请求的服务。这个程序对于我们理解后面的http协议的格式,报头以及网络上的资源的理解, 以及本节web路径等等都有着重要作用。 可以说我们就用代码来理解这些东西。 那么废话不多说, 现在开始我们的学习吧。         ps:本节内容建议先看一下上一篇文章http的相关概念哦:linux网络 | 深度学习http的相关概念-ZEEKLOG博客 目录  准备文件  makefile HttpServer.hpp 类内成员 封装sockfd start  ThreadRun  全部代码 运行结果 响应书写 Web路径  准备文件         首先准备文件: 这里面Httpserver.cc用来运行接收http请求的服务。 HttpServer.hpp用来定义http请求。Log.hpp就是一个打印日志的小组件, Socket.hpp同样是套接字的组件。 到使用直接调用相关接口即可。(Log.hpp和Socket.hpp如何实现不讲解, 如果想要知道

By Ne0inhk
Flutter 组件 ubuntu_service 适配鸿蒙 HarmonyOS 实战:底层系统服务治理,构建鸿蒙 Linux 子系统与守护进程交互架构

Flutter 组件 ubuntu_service 适配鸿蒙 HarmonyOS 实战:底层系统服务治理,构建鸿蒙 Linux 子系统与守护进程交互架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 ubuntu_service 适配鸿蒙 HarmonyOS 实战:底层系统服务治理,构建鸿蒙 Linux 子系统与守护进程交互架构 前言 在鸿蒙(OpenHarmony)生态迈向工业互联、智能车载及深度客制化终端的背景下,如何实现 Flutter 应用对底层 Linux 服务(如 Systemd/DBus)的受控访问、在端侧治理长驻守护进程,已成为提升应用系统级集成能力的“技术门槛”。在鸿蒙设备这类强调内核级安全防护与微内核分布式调度的环境下,如果应用仅能实现表层 UI 的交互,而无法感知、重启或监控底层硬件驱动相关的后台服务,就无法在大屏中控、工业看板或服务器管理设备中胜任“控制塔”的角色。 我们需要一种能够穿透沙箱壁垒、支持 DBus 通信协议且具备高可靠服务状态感知能力的系统治理方案。 ubuntu_service 为

By Ne0inhk

【架构】前端 pnpm workspace详解

前端 pnpm workspace 架构详解 一篇帮你搞懂 pnpm workspace 的实战向教程,从「为啥要用」到「怎么配」全给你捋清楚;每个知识点都会讲清是什么、为什么、怎么用、注意啥,方便你系统学习、随时查阅、直接落地。 一、先聊聊:我们到底遇到了啥问题? 做前端久了,多包、monorepo、组件库联调这些事一多,就会踩到一堆具体又磨人的坑。下面把这些痛点拆开说:具体表现 → 典型场景 → 对你有啥影响。搞清楚这些,后面再看 pnpm workspace 解决啥就一目了然。 1.1 node_modules 膨胀,磁盘和时间都遭殃 具体表现:用 npm 搞 monorepo 时,根目录一个

By Ne0inhk

《n8n Webhook 节点最强教程:入门到生产级的完整实战(含流程图 / Demo JSON / 测试数据)》

1. Webhook 节点是什么?为什么它是 n8n 的灵魂? Webhook 节点用于 接收外部请求,让 n8n 可主动响应该请求,从而触发自动化流程。 通俗理解: Webhook = 让 n8n 变成一个可以被“别人访问”的 API。 别人(第三方系统)可以通过 HTTP 请求来“触发”你的工作流,例如: * 一个表单被提交 * 一个付费事件发生 * 一个用户注册成功 * 一条消息发送到机器人 * 外部系统定时推送数据 Webhook 的价值: ✔ 实现“被动触发”的自动化(无需轮询) ✔ 外部系统 → 主动通知 → 触发流程 ✔ 替代 API Server 的轻量级方案 ✔ 支持 GET/POST

By Ne0inhk