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

leetcode 数组总结篇

基础理论
  1. 数组:下标时从 0 开始的,地址是连续的,不能删除,只能覆盖;
  2. 数组的实现:vector动态数组
常用操作
头文件
#include <iostream>
#include <vector>
#include <cstdint>  // INT32_MAX
#include <algorithm> // min 函数
using namespace std;
创建 & 打印输出
// 一维数组
vector<int> nums = {1,2,3,4,5,6,7};// 一维数组,scanf输入元素
cin >> n;
vector<int> nums(n);
for(int i = 0; i < n; i++){scanf("%d",&nums[i]); // 一行输入一个元素
}// 二维数组,n*m的数组,默认值为0
vector<vector<int>> vec(n,vector<int>(m));// 二维数组,n*m的数组,默认值为1
vector<vector<int>> vec(n,vector<int>(m,1));// 二维数组,cin 输入元素
cin >> n >> m;
vector<vector<int>> vec(n,vector<int>(m));for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){cin >> vec[i][j];sum += vec[i][j];}
}// 二维数组的输出
void printVector(vector<vector<int>>& nums){cout << "[";for(int i = 0; i < nums.size(); i++){if(i != 0) cout << " ";// 子数组之间加空格分隔cout << "[";for(int j = 0; j < nums[i].size(); j++){cout << nums[i][j];if(j != nums[i].size() - 1) cout << ", ";//每行的最后一个元素不加逗号}cout << "]";if(i != nums.size() - 1) cout << ",";// 最后一个子数组不加逗号}cout << "]" << endl;
}
输入 & 打印输出
while(scanf("%d%d", &a, &b) == 2) // 一行输入两个元素
printf("%d\n",sum); // 一行输出一个元素
数组经典题目
1. 二分法
  • 左闭右闭[left, right]:
    • while(left <= right)
      - if(nums[mid] > target) right = mid -1;
    • if(nums[mid] < target) left = mid + 1;
      - if(nums[mid] == target) return mid;
  • 左闭右开[left, right):
    • while(left < right)
      - if(nums[mid] > target) right = mid;
      - if(nums[mid] < target) left = mid + 1;
      - if(nums[mid] == target) return mid;
  • 时间复杂度:O(logn)
2. 双指针:

移除元素和有序数组的平方

  • 1. 移除元素:
    • 快指针:寻找新元素,不断的移向下一个元素,判断是否与target相等
    • 慢指针:指向新数组(不包含 target的数组)下标的位置
  • 2. 有序数组的平方:
    • 指针 i :数组起始位置;指针 j:数组终止位置
    • 新数组result 存储结果,k:数组终止位置
    • nums[i] * nums[i] >= nums[j] * nums[j] result[k--] = nums[i] * nums [i]
    • nums[i] * nums[i] < nums[j] * nums[j] result[k--] = nums[j] * nums[j]
3. 滑动窗口:

根据当前子序列的大小情况,不断调整子序列的起始位置和终止位置。使用一个for循环完成两个for循环的搜索。

  • 窗口内:要维护的子序列
  • 窗口的终止位置j :for循环更新变量 j(外层);
  • 窗口的起始位置 i:窗口内元素的值不满足条件了,就要向前移动,while更新 i(内层)
4. 螺旋矩阵:

和二分法类似,首先要确定循环不变量,左闭右开

5. 前缀和:

找出指定区间[a, b]元素的总和 sum

  • 累加:p[i] 表示 下标 0ivec[i] 累加之和
  • if (a == 0) sum = p[b]
  • if(a != 0) sum = p[b] - p[a - 1]

相关文章:

leetcode 数组总结篇

基础理论 数组&#xff1a;下标时从 0 开始的&#xff0c;地址是连续的&#xff0c;不能删除&#xff0c;只能覆盖&#xff1b;数组的实现&#xff1a;vector动态数组 常用操作 头文件 #include <iostream> #include <vector> #include <cstdint> // IN…...

盲盒小程序开发平台搭建:打造个性化、高互动性的娱乐消费新体验

在数字化浪潮席卷消费市场的今天&#xff0c;盲盒小程序以其独特的趣味性和互动性&#xff0c;迅速成为了年轻人追捧的娱乐消费新宠。盲盒小程序不仅为用户带来了拆盒的惊喜和刺激&#xff0c;更为商家提供了创新的营销手段。为了满足市场对盲盒小程序日益增长的需求&#xff0…...

DuckDB系列教程:如何分析Parquet文件

Parquet 是一种强大的、基于列的存储格式&#xff0c;适用于实现更快捷和更高效的数据分析。您可以使用 DuckDB 这种内存型分析数据库来处理 Parquet 文件并运行查询以对其进行分析。 在这篇文章中&#xff0c;我们将逐步介绍如何使用 DuckDB 对存储在 Parquet 文件中的餐厅订单…...

深入解析:使用Python爬取Bilibili视频

深入解析&#xff1a;使用Python爬取Bilibili视频 引言 Bilibili&#xff0c;作为中国领先的年轻人文化社区&#xff0c;拥有海量的视频资源。对于想要下载Bilibili视频的用户来说&#xff0c;手动下载不仅费时费力&#xff0c;而且效率低下。本文将介绍如何使用Python编写一…...

GRE,MGRE

GRE&#xff1a;静态过程&#xff0c;有局限性 R1 &#xff1a; [r1]interface Tunnel 0/0/0 --- 创建一个虚拟的隧道接口 [r1-Tunnel0/0/0]ip address 192.168.3.1 24 --- 给隧道接口分配一个 IP 地址 [r1-Tunnel0/0/0]tunnel-protocol gre --- 定义接口的封装方式 [r1-Tun…...

【linux学习】linux系统调用编程

目录 一、任务、进程和线程 1.1任务 1.2进程 1.3线程 1.4线程和进程的关系 1.5 在linux系统下进程操作 二、Linux虚拟内存管理与stm32的真实物理内存区别 2.1 Linux虚拟内存管理 2.2 STM32的真实物理内存映射 2.3区别 三、 Linux系统调用函数 fork()、wait()、exec(…...

Azure Speech 赋能,为智能硬件注入 AI 语音 “新灵魂”

在人工智能技术飞速发展的今天&#xff0c;智能硬件正逐步渗透到人们生活的方方面面。AI玩具、AI眼镜、AI鼠标等创新产品不仅提升了用户体验&#xff0c;更带来了前所未有的交互方式。领驭科技凭借微软Azure Speech的强大技术能力&#xff0c;为硬件厂商提供一站式AI语音解决方…...

力扣DAY35 | 热100 | LRU缓存

前言 中等 ⚪ 这个题原本打算用双链表最小堆做&#xff0c;发现无解。没想到双向链表。 题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int …...

Python 助力人工智能与机器学习的深度融合

技术革新的 “源动力” 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;与机器学习&#xff08;ML&#xff09;无疑是最具影响力的技术领域&#xff0c;它们如同强大的引擎&#xff0c;推动着各个行业的变革与发展。Python 凭借其简洁易读的语法、丰富的库和…...

ARXML文件解析-1

目录 1 摘要2 ARXML文件2.1 作用及典型应用场景2.2 ARXML文件的结构树2.3 TAG&#xff08;XML元素&#xff09;2.4 ARXML文件关键元素解析2.4.1 XML声明与处理指令2.4.2 XML注释2.4.3 XML声明与根元素4.4.3.1 xmlns&#xff08;默认命名空间&#xff09;4.4.3.2 xmlns:xsi&…...

SignalR给特定User发送消息

1、背景 官网上SignalR的demo很详细&#xff0c;但是有个特别的问题&#xff0c;就是没有详细阐述如何给指定的用户发送消息。 2、解决思路 网上整体解决思路有三个&#xff1a; 1、最简单的方案&#xff0c;客户端连接SignalR的Hub时&#xff0c;只是简单的连接&#xff0c…...

React: hook相当于函数吗?

一、Hook 是一个函数&#xff0c;但不仅仅是函数 函数的本质 Hook 确实是一个 JavaScript 函数&#xff0c;例如 useState、useEffect 或自定义 Hook 都是函数。它们可以接受参数&#xff08;如初始状态值或依赖项数组&#xff09;&#xff0c;并返回结果&#xff08;如状态值和…...

Ubuntu 安装 VLC

最近项目中需要用VLC查看NVR下子设备的RTSP流&#xff0c;特此记录&#xff0c;便于日后查阅。 1、安装snap $ sudo apt update $ sudo apt install snapd 2、安装vlc $ sudo snap install vlc 3、可能遇到的问题 snap beta install on ubuntu 22.04 failing to start Qt: Se…...

【数据分享】2002-2023中国湖泊水位变化数据集(免费获取)

湖泊水位变化是研究水资源动态、生态系统演变和气候变化影响的重要指标。湖泊水位的升降不仅反映了降水、蒸发和入流水量的变化&#xff0c;还与人类活动、气候波动及地质过程密切相关。因此&#xff0c;高精度、长时间序列的湖泊水位数据对于水资源管理、洪水预测以及生态环境…...

UBUNTU编译datalink

参考文档 datalink 语雀 下载 git clone https://gitee.com/liyang9512/datalink 源码打包 mvn -Prelease-datalink -Dmaven.test.skiptrue clean install -U 启动准备 # unzip ./distribution/target/datalink-server-1.0.0.tar.gz tar -xvf ./distribution/target/da…...

免费送源码:Java+SSM+Android Studio 基于Android Studio游戏搜索app的设计与实现 计算机毕业设计原创定制

摘要 本文旨在探讨基于SSM框架和Android Studio的游戏搜索App的设计与实现。首先&#xff0c;我们详细介绍了SSM框架&#xff0c;这是一种经典的Java Web开发框架&#xff0c;由Spring、SpringMVC和MyBatis三个开源项目整合而成&#xff0c;为开发企业级应用提供了高效、灵活、…...

STM32单片机入门学习——第14节: [6-2] 定时器定时中断定时器外部时钟

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.04 STM32开发板学习——第14节: [6-2] 定时器定时中断&定时器外部时钟 前言开发…...

2025-04-03 Latex学习1——本地配置Latex + VScode环境

文章目录 1 安装 Latex2 安装 VScode3 配置环境3.1 汉化 VScode3.2 安装 latex 插件3.3 配置解释 4 编译示例5 加快你的编译5.1 取消压缩5.2 使用 PDF 代替图片 6 参考文章 1 安装 Latex 本文配置环境&#xff1a; Windows11 打开清华大学开源软件镜像站&#xff1a;https://mi…...

【CF】Day24——Codeforces Round 994 (Div. 2) D

D. Shift Esc 题目&#xff1a; 思路&#xff1a; 典DP的变种 如果这一题没有这个变换操作&#xff0c;那么是一个很典型的二维dp&#xff0c;每一个格子我们都选择上面和左边中的最小值即可 而这题由于可以变换&#xff0c;那我们就要考虑变换操作&#xff0c;首先一个显然…...

【Java集合】LinkedList源码深度分析

参考笔记&#xff1a;java LinkedList 源码分析&#xff08;通俗易懂)_linkedlist源码分析-CSDN博客 目录 1.前言 2.LinkedList简介 3.LinkedList的底层实现 4.LinkedList 与 ArrayList 的对比 4.1 如何选择 4.2 对比图 5.LinkedList 源码Debug 5.1 add(E e) &#xff…...

第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组:5.回文数组

题目1 回文数组 小蓝在无聊时随机生成了一个长度为 n 的整数数组&#xff0c;数组中的第 i 个数为 ai&#xff0c;他觉得随机生成的数组不太美观&#xff0c;想把它变成回文数组&#xff0c;也是就对于任意 i∈[1,n] 满足 a i a n − i 1 a_ia_{n−i}1 ai​an−i​1。 小蓝…...

高并发系统架构设计的深度解析与实施指南【大模型总结】

以下是对高并发系统架构设计的深度解析与实施指南&#xff0c;通过技术分层拆解和场景化案例说明&#xff0c;呈现完整的系统设计方法论&#xff1a; 一、容错优先思维的系统级实现 1. 混沌工程落地框架 # 混沌实验设计模板 class ChaosExperiment:def __init__(self, scope,…...

Python办公自动化(2)对wordpdf的操作

一、操作word文档 终端下载操作word文件的工具库&#xff1a; pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx 1.遍历文档中内容 paragraphs&#xff1a;段落属性&#xff0c;返回列表类型的段落地址&#xff0c;遍历每一个段落地址&#xff0c;通过…...

pip安装第三方库,但PyCharm中却无法识别

点击菜单栏File&#xff0c;选择Settings 系统默认的是PyCharm安装目录下的python.exe 解释器&#xff0c;不要用。 选择你的PYTHON的安装目录下的python.exe 解释器。如果不存在的话&#xff0c;增加进去 如果文件》设置打不开&#xff0c;需移除法化包。 打开 pycharm 安装目…...

新浪财经股票每天10点自动爬取

老规矩还是先分好三步&#xff0c;获取数据&#xff0c;解析数据&#xff0c;存储数据 因为股票是实时的&#xff0c;所以要加个cookie值&#xff0c;最好分线程或者爬取数据时等待爬取&#xff0c;不然会封ip 废话不多数&#xff0c;直接上代码 import matplotlib import r…...

Vue2 父子组件数据传递与调用:从 ref 到 $emit

提示&#xff1a;https://github.com/jeecgboot/jeecgboot-vue2 文章目录 案例父组件向子组件传递数据的方式父组件调用子组件方法的方式子组件向父组件传递数据的方式流程示意图 案例 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 以下是 整合后的关…...

Linux C++编译及g++使用操作

编译的步骤 编译选项参数 编译生成库文件 静态库 动态库 运行可执行文件 静态库由于已经包含了链接的文件所以可以直接执行&#xff1b;动态库方式由于是运行时链接&#xff0c;所以需要指定链接的路径&#xff1b;...

antvX6自定义 HTML 节点创建与更新教程

自定义 HTML 节点创建与更新教程 本文详细介绍如何利用 HTML、CSS 和 JavaScript 创建自定义节点&#xff0c;并通过动态更新节点数据来改变节点显示效果。无论你是否有前端基础&#xff0c;都能轻松跟着本教程一步步实现。 1. 基础样式设置 首先&#xff0c;使用 CSS 定义基…...

【Android】界面布局-线性布局LinearLayout-例子

线性布局&#xff08;LinearLayout&#xff09;是一种重要的界面布局中&#xff0c;也是经常使用到的一种界面布局 • 在线性布局中&#xff0c;所有的子元素都按照垂直或水平的顺序在界面上排列 ➢如果垂直排列&#xff0c;则每行仅包含一个界面元素 ➢如果水平排列&…...

Cortex-M 上编写汇编函数

在 ARM Cortex-M 系列单片机中使用汇编语言编写函数时,需要特别注意寄存器的使用、栈管理、调用约定以及与 C 语言的兼容性。以下是关键注意事项和示例说明: 1. 遵循 AAPCS 调用约定 ARM 定义了 AAPCS(ARM Architecture Procedure Call Standard),规定了函数调用时寄存器…...