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

devtools/2025/3/18 14:45:52/

目录

一、存储方式

二、二分查找

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

四、数组操作:滑动窗口


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

一、存储方式

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/devtools/168080.html

    相关文章

    京东Taro小程序原生端接入操作

    首先对接之前先看文档&#xff0c;看是需要接入mPass平台&#xff0c;还是仅限在原生端接入Taro小程序&#xff1b; 本文章是仅限接入Taro小程序&#xff0c;接下来废话不多少&#xff0c;我们开始新的接入流程&#xff1a; 首先将这几个文件导入到当前项目中&#xff1a; 还…

    iOS OC匹配多个文字修改颜色和字号

    1、传入字符串数组&#xff0c;通过NSMutableAttributedString修改匹配文字 可以根据需要搞成匹配单个字符串 - (NSAttributedString *)applyFontSizeToText:(NSString *)text matchStrings:(NSArray<NSString *> *)matchStrings {NSMutableAttributedString *attribut…

    【Qt】QWidget属性介绍

    &#x1f3e0;个人主页&#xff1a;Yui_ &#x1f351;操作环境&#xff1a;Qt Creator &#x1f680;所属专栏&#xff1a;Qt 文章目录 前言1. enabled属性2.geometry属性2.1 改变控件位置2.2 女神表白程序2.3 知识补充——window frame 3. windowsTitle属性4. windowIcon属性…

    基于机器学习的睡眠障碍预测模型对比分析

    1、研究背景 2、数据概述 3. 数据可视化分析 (1) 各职业的平均睡眠时长 (2) BMI 分布 (3) 血压收缩压与舒张压的关系 (4) 每日步数的分布 (5) 睡眠质量的分布 4. 机器学习模型对比 (1) 决策树模型

    Word 小黑第20套

    对应大猫21 特定一页设为横向 上下用分页符

    LLM学习之路-01-第一章-预训练/大模型分布式训练并行技术(一)概述

    大模型分布式训练并行技术&#xff08;一&#xff09;综述 引言 为了训练最大的 Llama 3 模型&#xff0c;Meta 结合了三种并行化方式&#xff1a;数据并行化、模型并行化和管道并行化。当同时在 16K GPU 上进行训练时&#xff0c;他们最高效的实现实现了每 GPU 超过 400 TFLO…

    ST的全新STM32U3微控制器(MCU)简析

    一 概述 意法半导体在之前的STM32型号中引领了超低功耗&#xff08;ULP&#xff09;MCU的步伐&#xff0c;现在又推出了新的STM32U3系列&#xff0c;将ULP性能提升到一个新的水平。凭借先进的节能芯片设计&#xff0c;通过人工智能增强工具进行微调&#xff0c;以及运行频率高…

    【为什么游戏能使人上瘾】

    为什么游戏能使人上瘾&#xff0c;而工作不会&#xff1f;——从神经科学、心理学与行为设计学拆解 一、多巴胺回路的“即时收割” vs “延迟满足” 游戏的神经劫持机制 即时反馈闭环&#xff1a;游戏设计遵循“行为→奖励→强化”的秒级循环。例如&#xff1a; • 击杀小怪→金…