第一节:关于数组的算法(python版)

embedded/2025/3/21 5:34:02/

目录

一、存储方式

二、二分查找

三:数组的算法操作:双指针算法

四、数组操作:滑动窗口


视频讲解地址:动态-哔哩哔哩

一、存储方式

python中的list本质是动态数组,支持自动扩容。还有一个numpy数组,二维支持连续内存储存

数组是存放在连续内存空间上的相同类型数据的集合,但是对于二维的数组在c或c++中内存是完全连续的,在java或python中是有多个独立的一维数组组成内存可能不连续(numpy除外)。

数组下标是从0开始的

因为数组的储存方式是连续的,那么我们删除或者添加元素的时候就要移动其他元素的地址,导致时间复杂度有o(n),但是访问方便,通过下标直接访问,时间复杂度只有o(1)。

二、二分查找

704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

基于分治策略,通过不断的将有序的数组分成两半,缩小搜索范围,直到找到目标元素或确认不存在。时间复杂度为O(log n),效率远超线性查找

python">class Solution:def search(self, nums: List[int], target: int) -> int:left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] == target:return mid        # 找到目标,返回索引elif nums[mid] < target:left = mid + 1    # 目标在右半部分else:right = mid - 1   # 目标在左半部分return -1                 # 未找到到

相关题目leetcode704 

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

python">class Solution:def search(self, nums: List[int], target: int) -> int:i, j = 0, len(nums) - 1while i <= j:m = (i + j) // 2if nums[m] < target: i = m + 1elif nums[m] > target: j = m - 1else: return mreturn -1

三:数组的算法操作:双指针算法

以leetcode977. 有序数组的平方为例:

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

    示例 1:

    输入:nums = [-4,-1,0,3,10]
    输出:[0,1,9,16,100]
    解释:平方后,数组变为 [16,1,0,9,100]
    排序后,数组变为 [0,1,9,16,100]

    示例 2:

    输入:nums = [-7,-3,2,3,11]
    输出:[4,9,9,49,121]
    
    python">class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:l, r, i = 0, len(nums)-1, len(nums)-1res = [float('inf')] * len(nums) # 需要提前定义列表,存放结果while l <= r:if nums[l] ** 2 < nums[r] ** 2: # 左右边界进行对比,找出最大值res[i] = nums[r] ** 2r -= 1 # 右指针往左移动else:res[i] = nums[l] ** 2l += 1 # 左指针往右移动i -= 1 # 存放结果的指针需要往前平移一位return res

    四、数组操作:滑动窗口

    • 1456. 定长子串中元音的最大数目 1263

    给你字符串 s 和整数 k 。

    请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。

    英文中的 元音字母 为(aeiou)。

    示例 1:

    输入:s = "abciiidef", k = 3
    输出:3
    解释:子字符串 "iii" 包含 3 个元音字母。
    

    示例 2:

    输入:s = "aeiou", k = 2
    输出:2
    解释:任意长度为 2 的子字符串都包含 2 个元音字母。
    python">class Solution:def maxVowels(self, s: str, k: int) -> int:i,j=0,0res=0yuanyin=['a', 'e', 'i', 'o', 'u']ans=0while j<len(s):if s[j] in yuanyin:res+=1ans=max(ans,res)if j-i+1>=k:if s[i] in yuanyin:res-=1ans=max(ans,res)i+=1j+=1return ans
    


    http://www.ppmy.cn/embedded/174343.html

    相关文章

    电脑如何录屏

    以下是电脑录屏的常用方法总结&#xff0c;涵盖系统自带工具、第三方软件及进阶功能&#xff0c;结合不同场景需求推荐最佳方案&#xff1a; 一、系统自带工具 Xbox Game Bar&#xff08;Windows 10/11&#xff09; 操作步骤&#xff1a;按 WinG 打开游戏栏 → 点击录制按钮&am…

    内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP

    1.WinRM&WinRS 条件&#xff1a; 双方开启winrm winrs服务 2008版本以上默认开启&#xff0c;win 7默认关闭 检测使用cs内置端口扫描5985开放情况 进行连接 winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami 2.内网-spn shell setspn -T …

    “消失的中断“

    “消失的中断” 1. 前言 在嵌入式开发过程中&#xff0c;中断必不可少。道友们想必也经常因为中断问题头疼不已&#xff0c;今天来说说一个很常见的问题&#xff0c;“消失的中断”。最近项目在使用第三方MCAL的时候&#xff0c;就遇到了I2C中断丢失的问题&#xff0c;排查起…

    【sklearn 03】逻辑回归、决策树、支持向量机

    逻辑回归、决策树、支持向量机 - 逻辑回归 logistics regression&#xff08;逻辑回归&#xff09;算法是经典的分类算法&#xff0c;基本思想是构造一个概率的拟合函数。 决策树 决策树的基本思想是根据样例去推断其背后的树形知识表征 支持向量机 支持向量机SVM(support…

    奇瑞汽车智能化战略发布,开启“四大平权”新时代

    3月18日&#xff0c;奇瑞汽车智能化战略发布会顺利召开。 据「TMT星球」了解&#xff0c;活动聚焦“油电同智 全球同行”&#xff0c;正式发布奇瑞集团智能化战略规划&#xff0c;并集中展示猎鹰智驾、人形机器人、智舱大模型等最新核心技术成果。 作为中国汽车智能化领域的先…

    C#:深入理解Thread.Sleep与Task.Delay

    1.核心区别概述 特性Thread.SleepTask.Delay阻塞类型同步阻塞当前线程异步非阻塞&#xff0c;释放线程适用场景同步代码中的简单延时异步编程中的非阻塞等待资源消耗占用线程资源&#xff08;线程挂起&#xff09;不占用线程&#xff08;通过计时器回调&#xff09;精度依赖操…

    51单片机的工作方式

    目录 一、51 单片机的时钟电路及时钟信号 &#xff08;一&#xff09;时钟电路 &#xff08;二&#xff09;时钟信号 二、51 单片机的CPU 时序 &#xff08;一&#xff09;时钟周期​ &#xff08;二&#xff09;机器周期​ &#xff08;三&#xff09;指令周期​ 三、…

    Vue 中 this 使用指南与注意事项

    文章目录 1. this 的基本概念1.1 Vue 实例中的 this1.2 this 指向问题 2. 常见问题与解决方案2.1 生命周期钩子中的 this2.2 方法中的 this2.3 回调函数中的 this 3. 高级用法与技巧3.1 使用箭头函数3.2 绑定 this3.3 使用闭包 4. 性能优化与调试4.1 性能优化策略4.2 调试技巧 …