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

基础数据结构之——【顺序表】(上)

从今天开始更新数据结构的相关内容。(我更新博文的顺序一般是按照我当前的学习进度来安排,学到什么就更新什么(简单来说就是我的学习笔记),所以不会对一个专栏一下子更新到底,哈哈哈哈哈哈哈!!!😄)


本专栏以力扣为落脚点,以实际题目为依据来进行相应知识点的讲解和应用,希望对你能有所帮助!

废话不多说,我们直接开始!
在这里插入图片描述


文章目录

  • :fire:LC 2057 ----值相等的最小索引(简单)
      • :star:二分查找(Binary Search):
  • :fire:LC 1464 ----数组中两元素的最大乘积(简单)
      • :star:sort函数:
  • :fire:LC 485----最大连续 1 的个数(简单)
  • :fire:LC 27---- 移除元素(简单)
      • :star:vector中删除元素的方法总结:
  • :fire:LC 665----非递减数列(中等)


🔥LC 2057 ----值相等的最小索引(简单)

题目链接:https://leetcode.cn/problems/smallest-index-with-equal-value/

题目简介:

给你一个下标从 0 开始的整数数组 nums ,返回 nums 中满足 i mod 10 == nums[i] 的最小下标 i ;如果不存在这样的下标,返回 -1 。

  • x mod y 表示 x 除以 y 的 余数 。

这道题就很简单了,按照题目说的条件,直接线性枚举(可以理解为直接遍历)一遍,就可找出答案。

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

代码示例:


class Solution {
public:int smallestEqual(vector<int>& nums) {//获取数组长度int n=nums.size();for(int i=0;i<n;i++){if(i%10==nums[i]) return i;}return -1;}
};

可能会有人问,二分查找行不行,答案是不行!因为nums数组的元素之间并没有特定的联系(是无序的),不适合二分。

既然谈到了,那就简单说说什么是二分吧。

⭐️二分查找(Binary Search):

是一种在有序数组中查找目标值的算法。它通过将目标值与数组的中间元素进行比较,从而确定目标值可能存在的位置。

下面是一个简单的函数模板:

int firstBadVersion(int *arr,int n) {//定义左右边界,这里我称left和right为游标,而不是指针!避免混淆
int left=-1,right=n;//定义中点
int mid=0;//进行二分
while(right-left>1){//记录中点
mid=left+(right-left)/2;//满足条件时:
if(arr[mid]满足条件){//移动游标
right=mid;
}
//不满足条件时:
else{
left=mid;
}
}
return right;
}
  1. 可能有人会问,游标为什么要取-1和n,不能取0和n-1吗?他们的中点不应该一样吗?

    答:其实这是为了避免极端情况的发生,如果左右边界(即0和n-1)满足条件时,二分查找会出错,你可以想想为什么。

  2. 换位置时,一定是满足条件时换right吗?

    答:不一定,这个得具体情况具体分析!


🔥LC 1464 ----数组中两元素的最大乘积(简单)

题目链接:https://leetcode.cn/problems/maximum-product-of-two-elements-in-an-array/?envType=list&envId=7q99qCXM

题目简介:

给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请你计算并返回该式的最大值。

代码示例:

class Solution {
public:int maxProduct(vector<int>& nums) {//这里直接调用sort函数排序:sort(nums.begin(),nums.end());//获取数组长度int len=nums.size();//返回结果return (nums[len-1]-1)*(nums[len-2]-1);}
};

这里我们用到了sort函数,sort函数的时间复杂度通常为O(n log n),所以我决定写一个O(n)的解法出来:

class Solution {
public:int maxProduct(vector<int>& nums) {int n=nums.size();int max=0;//最大值int maxIndex;//最大值索引int sec=0;//次大值int secIndex;//次大值索引int i,j;//寻找最大值和其索引for(i=0;i<n;i++){if(nums[i]>max) {max=nums[i];maxIndex=i;}}//寻找次大值和其索引for(j=0;j<n;j++){if(j!=maxIndex){if(nums[j]>sec) {        sec=nums[j];   secIndex=j;            }}}int maxSum=(max-1)*(sec-1);return maxSum;}
};

既然用到了sort函数,那就来简单介绍一下:

⭐️sort函数:

是一种常见的排序算法,它能够将一个数组或容器中的元素按照指定的排序规则进行排列。

  • 在C++语言中,sort函数在< algorithm >头文件中。
  • 基本形式:sort(first,end,comp)

其中,first和last是表示待排序范围的迭代器,comp是一个可选的比较函数,用于指定排序规则。如果不提供comp参数,则默认按照升序排序。要想降序的话,第三个参数可以写成greater<int>(),其中<>里面也可以写double,long,float等等

  • 总的来说:
    升序:sort(first,end,cmp)或者sort(first,end)
    降序:sort(first,end,greater<int>())

🔥LC 485----最大连续 1 的个数(简单)

题目链接:https://leetcode.cn/problems/max-consecutive-ones/?envType=list&envId=7q99qCXM

题目简介:

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

代码示例:

class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int n=nums.size();//最长1的个数int maxLenOne=0;//计数器:1出现的个数int countOne=0;for(int i=0;i<n;i++){if(nums[i]==1) countOne++;//计数器:遇1自增else{          maxLenOne= (maxLenOne>countOne)?maxLenOne:countOne;//对长度赋值countOne=0;//计数器归0}}//边界值:可能最后一个数不是0,所以最后一段1的值没有被比较,在此比较一次,防止遗漏最优解maxLenOne= (maxLenOne>countOne)?maxLenOne:countOne;return maxLenOne;}
};

🔥LC 27---- 移除元素(简单)

题目链接:https://leetcode.cn/problems/remove-element/?envType=list&envId=7q99qCXM

题目简介:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

代码示例:

class Solution {
public:int removeElement(vector<int>& nums, int val) {// int n=0;for(int i=0;i<nums.size();i++){if(nums[i]==val){// n=i;nums.erase(nums.begin()+i);i=i-1;}}return nums.size();}
};

这里就是一个线性枚举,然后对当前值进行一个判断,如果等于目标值,就将其删除,用到了vector:erase()函数。

⭐️vector中删除元素的方法总结:

vector中删除元素大概有这么几种方法:

  • nums.pop_back(); //删除最后一个元素
  • nums.clear(); //清空nums中的元素
  • nums.erase(nums.begin()+i,nums.begin()+j); //删除nums中从第i+1个元素到第j+1个的所有元素,也就是索引[i,j]。写成nums.erase(nums.begin()+i)就是直接删除第i+1个元素(下标为i)

🔥LC 665----非递减数列(中等)

题目链接:https://leetcode.cn/problems/non-decreasing-array/?envType=list&envId=7q99qCXM

题目简介:

给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。

代码示例:

class Solution {
public:bool checkPossibility(vector<int>& nums) {int n=nums.size();if(n==1 || n==2) return true;int count=0;int count1=0;int count2=0;vector<int>num1(nums);vector<int>num2(nums);for(int i=1;i<n;i++){if(nums[i]<nums[i-1]){                                        nums[i-1]=nums[i];                break; }   }for(int i=1;i<n;i++){if(num1[i]<num1[i-1]){num1[i]=num1[i-1];        break;}    }for(int i=1;i<n;i++){if(num2[i]<num2[i-1]){if(i+1<n){num2[i]=num2[i+1];    break; } else num2[i]=num2[n-2];                         }    }        for(int i=1;i<n;i++){if(num1[i]<num1[i-1]) count1=1;if(nums[i]<nums[i-1]) count=1;if(num2[i]<num2[i-1]) count2=1;if(count==1 && count==1 && count2==1) return false;}  return true;}
};

这道题我用的是枚举的方法,暂时没啥更优化的方法,以后想到了会进行更新!


在这里插入图片描述

相关文章:

基础数据结构之——【顺序表】(上)

从今天开始更新数据结构的相关内容。&#xff08;我更新博文的顺序一般是按照我当前的学习进度来安排&#xff0c;学到什么就更新什么&#xff08;简单来说就是我的学习笔记&#xff09;&#xff0c;所以不会对一个专栏一下子更新到底&#xff0c;哈哈哈哈哈哈哈&#xff01;&a…...

Apollo自动驾驶系统概述(文末参与活动赠送百度周边)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

Java 21 新特性:Unnamed Classes and Instance Main Methods

Java 21引入了两个语言核心功能&#xff1a; 未命名的Java类你说新的启动协议&#xff1a;该协议允许更简单地运行Java类&#xff0c;并且无需太多样板 下面一起来看个例子。通常&#xff0c;我们初学Java的时候&#xff0c;都会写类似下面这样的 Hello World 程序&#xff1…...

Tomcat启动后的日志输出为乱码

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

CSP-J第二轮试题-2021年-4题

文章目录 参考&#xff1a;总结 [CSP-J 2021] 小熊的果篮题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 提示答案答案1答案2答案3 现场真题注意事项 参考&#xff1a; https://www.luogu.com.cn/probl…...

10.1 今日任务:select实现服务器并发

#include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.112.115" //本机IP&#xff0c;ifco…...

P1540 [NOIP2010 提高组] 机器翻译(模拟)

[NOIP2010 提高组] 机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件&#xff0c;他经常用这个软件来翻译英语文章。 题目描述 这个翻译软件的原理很简单&#xff0c;它只是从头到尾&#xff0c;依次将每个英文单词用对应的中文含义来替换。对于每个英文单词&#xf…...

生信教程:ABBA-BABA分析之滑动窗口

简介 ABBA BABA 统计&#xff08;也称为 D 统计&#xff09;为偏离严格的分叉进化历史提供了简单而有力的检验。因此&#xff0c;它们经常用于使用基因组规模的 SNP 数据测试基因渗入。 虽然最初开发用于基因渗入的全基因组测试&#xff0c;但它们也可以应用于较小的窗口&#…...

二分答案(求最大值的最小值||求最小值的最大值)

引入 二分答案要建立在二分查找的基础上&#xff0c;在此之前&#xff0c;要知道二分查找的三个模板 模板一 while(l<r) {int mid(lr)>>1;if(check(mid)) rmid;else lmid1; }模板二 while(l<r) {int midlr1>>1;if(check(mid)) lmid;else rmid-1; }模板三…...

思维模型 周期

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。周期是一个看似极为简单&#xff0c;但背后却蕴藏着大智慧的模型&#xff0c;了解周期&#xff0c;对于了解王朝更替&#xff0c;数学之美&#xff0c;经济运转等都有帮助。 1 周期的应用 …...

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 介绍项目/ 需求分析

文章目录 一、消息队列是什么&#xff1f;二、需求分析结构解析功能解析规则解析绑定关系交换机类型消息应答 三、持久化存储四、网络通信提供的API复用TCP连接 五、消息队列概念图 一、消息队列是什么&#xff1f; 消息队列 (Message Queue, MQ)就是将阻塞队列这一数据结构提取…...

Python学习之索引与切片

Python学习之索引与切片 s “0abcdefghijklmnopqrstuvwxyz”&#xff0c;第一个元素‘0’&#xff0c;索引号为0&#xff0c;最后一个元素‘z’&#xff0c;索引号为26 1. s[0]获取索引号为0的元素 2. s[1:3]获取索引号为1的元素&#xff0c;直到但不包括索引号为3的元素。即…...

编程每日一练(多语言实现)基础篇:满足abcd=(ab+cd)^2的数 (增加Go语言实现)

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现3.4 JavaScript 语言实现3.5 Go 语言实现 一、实例描述 假设 abcd 是一个四位整数&#xff0c;将它分成两段&#xff0c;即 ab 和 cd&#xff0c;使之相加求和后再平方。求满…...

LeetCode 热题 HOT 100:回溯专题

LeetCode 热题 HOT 100&#xff1a;https://leetcode.cn/problem-list/2cktkvj/ 文章目录 17. 电话号码的字母组合22. 括号生成39. 组合总和46. 全排列补充&#xff1a;47. 全排列 II &#xff08;待优化)78. 子集79. 单词搜索124. 二叉树中的最大路径和200. 岛屿数量437. 路径…...

喝健康白酒 有益生心健康

中国的制酒史源远流长&#xff0c;酒渗透在中华五千年的文化中。酒与烟不同&#xff0c;烟对人体有百害而无一利&#xff0c;而对于酒&#xff0c;若掌握好饮酒的度&#xff0c;对人体有一定的养生作用&#xff0c;所以我们通常会说“戒烟限酒”。 据一些专家研究&#xff0c;…...

动态规划:两个数组的dp问题(C++)

动态规划&#xff1a;两个数组的dp问题 前言两个数组的dp问题1.最长公共子序列&#xff08;中等&#xff09;2.不同的子序列&#xff08;困难&#xff09;3.通配符匹配&#xff08;困难&#xff09;4.正则表达式&#xff08;困难&#xff09;5.交错字符串&#xff08;中等&…...

BASH shell脚本篇2——条件命令

这篇文章介绍下BASH shell中的条件相关的命令&#xff0c;包括&#xff1a;if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令&#xff0c;请参考&#xff1a;BASH shell脚本篇1——基本命令 1. If语句 if语句用于在顺序执行语句的流程中执行条…...

【图论C++】Floyd算法(多源最短路径长 及 完整路径)

>>>竞赛算法 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在算法竞赛学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff…...

小谈设计模式(11)—模板方法模式

小谈设计模式&#xff08;11&#xff09;—模板方法模式 专栏介绍专栏地址专栏介绍 模板方法模式角色分类抽象类&#xff08;Abstract Class&#xff09;具体子类&#xff08;Concrete Class&#xff09;抽象方法&#xff08;Abstract Method&#xff09;具体方法&#xff08;C…...

C#程序中很多ntdll.dll、clr.dll的线程

如下图 需要“右键工程——调试——取消勾选‘启用本地代码调试’”即可。...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...