算法学习(数组和字符串) 之数组简介

news2024/11/18 13:48:31

集合、列表和数组

1.集合:

集合一般被定义为由一个或多个确定的元素所构成的整体。通俗来讲,集合就是将一组事物组合在一起。你可以将商店里的所有物品当成一个集合。

特点:

  1. 集合里的元素没有顺序
  2. 集合里的元素类型不一定相同

2.列表(又称线性列表):

列表是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。列表的概念是在集合的特征上形成的,它具有顺序,且长度是可变的。列表可以是一张购物清单。

特点:

  1. 列表的长度是可变的
  2. 列表中不存在索引这个概念

3.数组 

数组是列表的实现方式之一,它具有列表的特征,同时也具有自己的一些特征,数组会用一些名为 索引 的数字来标识每项数据在数组中的位置,且在大多数编程语言中,索引是从 0 算起的

 特点:

  1. 数组的长度是可变的
  2. 数组中有索引这个概念

 

 数组的操作

 LeetCode算法题:

var pivotIndex = function(nums) {
    // 先循环求出数组总和当作数组右边的和
    let rightSum = 0
    for(let item of nums){
        rightSum += item
    }
    let leftSum = 0
    for([i,item] of nums.entries()){
        // 右边的和减去当前第i个元素成为新的右边的和
        rightSum = rightSum - item 
        // 左边的和 是否等于 右边的和
        if(leftSum == rightSum){
            // 返回当前下标
            return i
        }
        // 累加左边的和
        leftSum = leftSum +item
    }
    // 找不到返回 -1
    return -1
};

 不合格的算法 时间复杂度为 O(N) 

var searchInsert = function(nums, target) {
    for(let [i,item] of nums.entries()){
        if(target !== item){
          if(item>=target){
             return i
          }else{
            if(i==nums.length-1){
                return i+1
            }
          }
        }
    }
};

合格的算法 时间复杂度为  O(log N) 

二分查找

var searchInsert = function(nums, target) {
    let left = 0 ,right = nums.length-1
    while(left<=right){
       let mid = Math.floor((right+left)/2)
       if(nums[mid]===target){
           return mid
       }else if(nums[mid]<target){
           left = mid + 1
       }else{
           right = mid -1
       }
    }
    return left
};

var merge = function(intervals) {
   intervals.sort((a,b)=>a[0]-b[0]) //升序排序
   return intervals.reduce((prev,cur)=>{
        let peek = prev[prev.length-1] // 获取到 prev 中最后一项
        if(peek && peek[1]>=cur[0]){ // 如果当前项和 peek 存在交集
            let left = peek[0]
            let right = peek[1]>cur[1]?peek[1]:cur[1]
            prev[prev.length-1]=[left,right] // 合并 peek 和 当前项
        }else{
            prev.push(cur)
        }
        return prev
   },[])
};

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

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

相关文章

【Python入门篇】——Python中循环语句(for循环的基础语法)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…

Foley Sound——DECASE项目——项目复现

文章目录 概述项目复现配置环境下载并配置文件运行代码第一阶段&#xff0c;训练提取DTFR特征的模型资料搜集 train_vqvae.py 第二阶段&#xff0c;使用训练好的模型提取声音的DTFR特征torch.cuda.OutOfMemoryError: CUDA out of memory. 第三阶段&#xff0c;基于特征训练合成…

学习Netty BootStrap的核心知识,成为网络编程高手!

0 定义 深入 ChannelPipeline、ChannelHandler 和 EventLoop 后&#xff0c;如何将这些部分组织起来&#xff0c;成为可运行的应用程序&#xff1f; 引导&#xff08;Bootstrapping&#xff09;&#xff01;引导一个应用程序是指对它进行配置&#xff0c;并使它运行起来的过程…

AcWing算法提高课-1.3.8多重背包问题 III

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 有 N N N 种物品和一个容量是 V V V 的背包。 第 i i i 种物品最多有 s i s_i si​ 件&#xff0c;每件体积是 v i v_i vi​…

我们到底该怎么入门网络安全?一般人还真不行

我之前写了不少网络安全技术相关的故事文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人在微信里问我&#xff1a;&#xff08;文末入门福利&#xff09; 我刚入门网络安全&#xff0c;该怎么学&#xff1f; 要学哪些东西&#xff1f; …

linux系统打包压缩与搜索命令

1、tar命令 在linux系统中&#xff0c;常见的文件格式比较多&#xff0c;其中主要使用使用的tar和zip来压缩文件&#xff0c;tar命令的参数比较多&#xff0c;这里呢我一般只会记得几个比较常用的。 -c创建压缩文件-x解开压缩文件-z用Gzip压缩或解压-v显示压缩或者解压的过程-…

C语言—自定义类型(结构体、枚举、联合)

自定义类型 结构体结构体的声明特殊的声明结构的自引用结构体变量的定义和初始化结构体内存对齐修改默认对齐数offsetof宏 结构体传参 位段位段的定义&#xff08;声明&#xff09;位段的内存分配位段的跨平台问题位段的应用 枚举枚举类型的定义及使用枚举的优点 联合&#xff…

第02章 变量与运算符

一 关键字&#xff08;keyword&#xff09; 定义&#xff1a;被Java语言赋予了特殊含义&#xff0c;用做专门用途的字符串&#xff08;或单词&#xff09; HelloWorld案例中&#xff0c;出现的关键字有 class、public 、 static 、 void 等&#xff0c;这些单词已经被Java定义…

Linux设备驱动模型(二)

基于linux-3.14.16 设备模型&#xff08;LDM&#xff09;包括&#xff0c;总线、驱动、设备 一、总线及其api 1、注册一个总线 以i2c总线为例&#xff0c;下面基本表现出了注册一个总线的过程。 1、定义一个总线bus_type&#xff0c;填充几个回调 2、调用bus_register注册总线…

【STM32系列】硬件介绍及固件安装

【STM32系列】硬件介绍及固件安装 硬件介绍应用领域 固件安装进入DFU模式安装固件退出DFU&#xff0c;进入U盘模式 演讲稿 欢迎收看由咸鱼菌工作室出品的STM32系列教程。本篇内容主要是设备介绍及环境安装 硬件介绍 本系列所选硬件ZTMR(STM32)开发板 &#xff0c;选用STM32芯片…

新手如何学习挖SRC漏洞?【网络安全】

前言 有不少阅读过我文章的伙伴都知道&#xff0c;我从事网络安全行业已经好几年&#xff0c;积累了丰富的经验和技能。在这段时间里&#xff0c;我参与了多个实际项目的规划和实施&#xff0c;成功防范了各种网络攻击和漏洞利用&#xff0c;提高了安全防护水平。 也有很多小…

【ProtoBuf】1.初识ProtoBuf

————————————每一个不曾起舞的日子都是对生命的辜负。 初识ProtoBuf 一. 序列化概念二. ProtoBuf1. 什么是ProtoBuf2. ProtoBuf的特点3. ProtoBuf进行序列化反序列化的流程 三. 本章总结 一. 序列化概念 日常生活中&#xff0c;手机上收到的语音消息在网络中不能直…

多线技术:TDI时间延迟积分

多线技术&#xff1a;TDI时间延迟积分 在比较暗的环境下拍照&#xff0c;清晰成像的条件&#xff0c;是CMOS芯片获取足够的光。而获得足够光的方法有&#xff1a; 方案1.增加单位时间的光照强度&#xff08;光源、大镜头收集光&#xff09; 方案2.增加CMOS感光时长&#xf…

国潮还能怎么玩?小红书用户画像速看!

所谓“国潮”&#xff0c;概括来说就是“国风潮流”。主要有两层含义&#xff1a;其一&#xff0c;有中国文化和传统的基因&#xff1b;其二&#xff0c;能将传统文化与时下潮流相融合&#xff0c;使产品更具时尚感。在“国潮”元年之前&#xff0c;“国潮”大多指狭义上的特定…

macOS Ventura 13.5beta (22G5027e)发布

系统介绍 黑果魏叔 5 月 20 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 更新&#xff08;内部版本号&#xff1a;22G5027e&#xff09;&#xff0c;本次更新距离上次发布隔了 17 天。 macOS Ventura 带来了台前调度、连续互通相机、Face…

四象限法进程调度

周二收到一篇推送 一次云上网络毫秒级的优化与实践&#xff0c;很有意义的实践和探索&#xff0c;建议阅读&#xff0c;文章不长&#xff0c;没有冗长的源码分析&#xff0c;结论很清晰。 谈谈我的看法。 多少有种感觉&#xff0c;Linux 越来越像个响应系统而不是服务器。 虚…

TimesNet:用于一般时间序列分析的时间二维变化模型(代码解析)

前言 TimesNet&#xff1a;用于一般时间序列分析的时间二维变化模型论文下载地址&#xff0c;Github项目地址&#xff0c;论文解读系列本文针对TimesNet模型参数与模型架构开源代码进行讲解&#xff0c;本人水平有限&#xff0c;若出现解读错误&#xff0c;欢迎指出开源代码中…

回归分析-简单线性回归推导

回归分析-简单线性回归模型 在大数据分析中&#xff0c;回归分析是一种预测性的建模技术&#xff0c;它研究的是因变量&#xff08;目标&#xff09;和自变量&#xff08;预测器&#xff09;之间的关系。这种技术通常用于预测分析&#xff0c;时间序列模型以及发现变量之间的因…

浏览器免费安装ChatGPT插件与国内免费ChatGPT分享

文章目录 一、什么是ChatGPT&#xff1f;ChatGPT的功能&#xff1a; 二、如果在Edge上安装chatgpt插件三、国内免费ChatGPT四、ChatGPT程序员的影响五、Chatgp能取代程序员吗&#xff1f; 一、什么是ChatGPT&#xff1f; ChatGPT是一种基于自然语言处理的机器学习算法&#xf…

【牛客刷题】 选择题整理day3~day4

在知识的海洋里彻底疯狂&#xff01;&#xff01;&#xff01; 文章目录 1. try-catch-finally2. 方法调用3. 接口4. 1. try-catch-finally try-catch-finally的执行机制是 try块是不能被省略的&#xff0c;用于包含可能会抛出异常的代码&#xff0c;如果没有try块&#xff0c…