LeetCode:经典题之1491、896 题解与延伸
系列目录
88.合并两个有序数组
52.螺旋数组
567.字符串的排列
643.子数组最大平均数
150.逆波兰表达式
61.旋转链表
160.相交链表
83.删除排序链表中的重复元素
389.找不同
1491.去掉最低工资和最高工资后的工资平均值
896.单调序列
206.反转链表
92.反转链表II
141.环形链表
142.环型链表
目录
- 系列目录
- 1491. 去掉最低工资和最高工资后的工资平均值
- 方法一
- 方法二
- 896. 单调数列
- 方法一
- 方法二
- STL库
1491. 去掉最低工资和最高工资后的工资平均值
🌟数组+数学
原题链接
C++
若未特殊标明,以下题解均写用C++
- 在C++20之前,如果你想实现一个
reduce函数,可以编写或使用第三方库(如:Boost、STL的扩展) - 下面是一个简单的
reduce函数的实现,它使用std::accumulate算法来累加容器中的元素:
#include <numeric> // for std::accumulate
#include <vector> template<typename T, typename Iter>
T reduce(Iter begin, Iter end) { return std::accumulate(begin, end, T());
} int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; int sum = reduce(vec.begin(), vec.end()); // sum will be 15 return 0;
}
- 在C++中,
ranges::min()函数是C++20引入的一个标准库函数,用于在一个范围内找到最小值
示例:
#include <iostream>
#include <vector>
#include <ranges>using namespace std;int main() { vector<int> v = {4, 2, 9, 3, 5}; // 使用ranges::min查找并打印最小元素 auto min_value = ranges::min(v); cout << "The minimum value is: " << min_value << '\n'; // 你也可以使用begin()和end()迭代器 auto min_value_iter = ranges::min(v.begin(), v.end()); cout << "The iterator to the minimum value is: " << distance(v.begin(), min_value_iter) << '\n'; return 0;
}
方法一
auto+ranges::minmax
// 这里的 minmax不能颠倒
class Solution {
public:double average(vector<int>& salary) {int s = reduce(salary.begin(), salary.end()); auto [m, M] = ranges::minmax(salary);// 注意这里的doublereturn (double) (s - m - M) / (salary.size() - 2); }
};
方法二
模拟
class Solution {
public:double average(vector<int>& salary) {sort(salary.begin(), salary.end());int n = salary.size();// 注意这里是浮点数double sum = 0; // 这里n的上限为n-2,n-2-1+1=n-2for (int i = 1; i < n - 1; i ++) sum += salary[i];return sum / (n - 2);}
};
小试牛刀,再一起看看下面这道题吧~
896. 单调数列
🌟数组+数学
原题链接
方法一
class Solution {
public:bool isMonotonic(vector<int>& nums) {bool is_increase = true, is_decrease = true;int n = nums.size();// 为什么这里是 n-1而不是n——有i+1for (int i = 0; i < n - 1; i ++) { if (nums[i] < nums[i + 1])is_decrease = false;if (nums[i] > nums[i + 1])is_increase = false; }// 或运算——与之对应的且运算——&&return is_increase || is_decrease;}
};
is_sorted()函数
本身不会像sort函数一样,对数组进行排序,只判断是否已经是升序排序
rbegin()函数
c.begin() 返回一个迭代器,它指向容器c的第一个元素
c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置
c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素
c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置

在C++中,rbegin()是一个成员函数,用于获取指向容器( 如vector、list、deque、array等)最后一个元素的反向迭代器
反向迭代器是一种特殊的迭代器,它按照与正常迭代器相反的方向遍历容器
当你调用rbegin()时,它返回一个指向容器最后一个元素的反向迭代器
这意味着当你使用++操作符递增这个反向迭代器时,它实际上会向前移动到容器的上一个元素,而不是向后 同样,当你使用--操作符递减反向迭代器时,它会向后移动到容器的下一个元素
示例:
#include <iostream>
#include <vector>using namespaceint main() { vector<int> v = {1, 2, 3, 4, 5}; // 使用rbegin()获取指向容器最后一个元素的反向迭代器 auto rit = v.rbegin(); // 使用反向迭代器遍历容器 for (; rit != v.rend(); rit ++) { cout << *rit << ' '; // 输出:5 4 3 2 1 } cout << '\n'; return 0;
}
在这个示例中,我们创建了一个包含五个整数的vector 然后,我们使用rbegin()获取一个指向容器最后一个元素的反向迭代器,并使用这个迭代器遍历容器,从后向前输出元素
注意,我们使用v.rend()作为循环的结束条件,rend()返回一个表示反向迭代器“尾后”位置的反向迭代器
方法二
// 两次遍历——“检查”🧐
// 调用STL库里的 is_sorted()函数 检查向量是否为升序或降序排列
class Solution {
public:bool isMonotonic(vector<int>& nums) {return is_sorted(nums.begin(), nums.end()) || is_sorted(nums.rbegin(), nums.rend());}
};
STL库
在C++中,**STL(Standard Template Library,标准模板库)**是一个包含大量通用模板类和函数的库,这些模板类和函数用于处理各种常见的数据结构和算法STL是C++标准库的一部分,由ISO C++标准委员会制定,并包含在其中
STL的设计理念是“泛型编程”(generic programming),即编写可以处理多种数据类型的代码通过使用模板和迭代器,STL能够实现这种泛型编程的目标,使得C++代码更加灵活、可重用和易于维护
STL的应用:
- 提供大量的容器(containers),如
vector、list、deque(双端队列)、set、map等,用于存储和管理数据这些容器类都是模板类,可以存储任何类型的数据(只要该类型支持必要的操作,如:拷贝和赋值) - 包含一系列算法(algorithms),用于处理存储在容器中的数据这些算法包括排序、查找、复制、替换等STL的算法都是高度通用的,并且不依赖于特定的数据结构,因此可以应用于任何支持STL迭代器(iterator)的容器
- 包含一些迭代器(iterator),用于遍历和访问容器中的元素迭代器是一种设计模式,它提供了一种方法,用于遍历容器中的数据,而无需了解容器的底层实现细节STL的迭代器分为五类:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器
相关文章:
LeetCode:经典题之1491、896 题解与延伸
系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …...
2024三掌柜赠书活动第二十五期:Rust 游戏开发实战
目录 目录 前言 Rust语言概念 关于《Rust 游戏开发实战》 Rust系统编程的核心点 Rust开发的关键技术和工具 内容简介 作者简介 书中前言/序言 内容介绍 《Rust 游戏开发实战》全书速览 图书目录 结束语 前言 技术圈最近的编程语言新秀当属Rust莫属,Rus…...
基于Java蛋糕甜品商城系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…...
Tomcat get请求传数组集合参数
前言 最近做项目,需要通过GET传参,来实现查询的能力,本来是RPC调用,直接参数序列化即可。但是服务最近修改为HTTP,本来Spring Cloud的feign也可以直接传参数,但是当使用Nginx访问时参数到底传啥呢…...
信息学奥赛初赛天天练-34-CSP-J2021完善程序-按位异或、模拟算法、数组模拟环、约瑟夫问题应用
PDF文档公众号回复关键字:20240624 2021 CSP-J 完善程序3 1 完善程序 (单选题 ,每小题3分,共30分) (Josephus问题)有n个人围成一个圈,依次标号0至n-1。从0号开始,依次 0,1,0&#…...
【计算机视觉】人脸算法之图像处理基础知识(六)
图像直方图 图像直方图是描述图像中像素强度分布的一种统计图表,它是图像处理和计算机视觉领域中一个非常基础且重要的概念。图像直方图通常用于分析图像的亮度、对比度特性,以及在图像增强、阈值分割、特征提取等多种图像处理任务。 import cv2 impor…...
仓颉编程语言入门
华为在 2024 年 6 月 21 日的华为开发者大会上,华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。 仓颉编程语言文件后缀名为 .cj, 以下是第一个入门代码输出:你好,仓颉…...
在前端项目中,如何处理错误和异常?
在前端项目中,如何处理错误和异常? 在前端项目中,处理错误和异常是至关重要的,它能确保应用程序的稳定性和用户体验。以下是一些常见的方法: try-catch-finally结构:使用JavaScript的try/catch块来捕获并…...
Ubuntu系统下修改网卡IP地址
Ubuntu系统下修改网卡IP地址 一、Ubuntu系统介绍1.1 Ubuntu简介1.2 Ubuntu网络配置方式 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、配置网卡IP地址4.1 备份网卡配置文件4.2 查看当前IP地址4.3 修改…...
Scrapy如何对爬虫数据进行清洗和处理?
爬虫数据处理是数据采集应用中至关重要的一步。scrapy是一种流行的python爬虫框架,可以帮助我们快速高效地从网页中提取所需信息。但是,我们经常面临的一个问题是数据的质量低劣,存在各种噪声和错误,这使得它们难以用于后续分析和…...
Linux:基础IO(三.软硬链接、动态库和静态库、动精态库的制作和加载)
上次介绍了基础IO(二):Linux:基础IO(二.缓冲区、模拟一下缓冲区、详细讲解文件系统) 文章目录 1.软硬链接1.1硬链接1.2软链接使用场景 2.动态库和静态库1.1回顾1.2静态库的制作和使用为什么要有库制作者角度…...
低价可转债崩盘,发生了什么?
下跌不在于“出库”,甚至不在于“风险”。问题更多在于交易层面,何时能积聚更多的左侧资金并成功过渡至右侧。 低价券怎么了? 如果说6月初主要是小微盘品种的退市风险,后来是一些评级下调的品种,到本周,已…...
【面试题】马上金九银十了,简历该准备起来了,面试题你准备好了吗 ?浅谈 JS 浅拷贝和深拷贝
代码展示 let obj_old {name: Tom,age: 15,favorite: {food: bread,drink: milk} } let obj_new {...obj_old} console.log(obj_old obj_new) // false console.log(obj_old.name obj_new.name) // true console.log(obj_old.favorite obj_new.favorite) // true3. Ar…...
最新OPPO 真我手机 一加手机 使用adb命令永久关闭系统更新教程
使用adb命令永久关闭系统更新 一、先了解手机系统二、Android 11 以下使用adb 命令永久关闭系统更新1、adb 官方下载2、小白开启 USB 调试模式教程(熟手跳过)三、Android 12 以上使用adb 命令永久关闭系统更新什么您还是不会弄!赞赏我&#x…...
OnlyOffice:现代办公的最佳选择
目录 安装 使用 评价 对比(与WPS) 总结 在当今的数字化办公时代,选择一款功能全面且易于使用的办公软件至关重要。OnlyOffice作为一款现代化的办公软件,凭借其强大的功能和友好的用户体验,逐渐成为了众多企业和个…...
【收藏】2024年必备相图数据库资源集锦!
在材料化工领域,相图不仅仅是一个简单的图表,它是一个强大的工具,为材料科学家和工程师提供了深入理解材料行为的窗口。从选择合金元素及其比例的初步阶段,到后续的加工方法选择和热处理工艺的确定,相图都扮演着至关重…...
Zookeeper 二、Zookeeper环境搭建
Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式 单机模式:Zookeeper只运行在一台服务器上,适合测试环境集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”…...
Web3 学习
之前学习 web3,走了不少弯路,最近看到了 hackquest,重新刷了一遍以太坊基础,感觉非常nice,而且完全免费,有需要的可以试试,链接hackquest.io。...
Grafana+Prometheus(InfluxDB)+Jmeter使用Nginx代理搭建可视化性能测试监控平台
前言 在这篇博客文章中,将分享JMeter > Prometheus(InfluxDB) > Grafana的集成,以及Nginx端口反向代理各服务的端口。 背景 在JMeter插件库中,有一些后端监听器可供Kafka、ElasticSearch和Azure使用。默认情况下,JMeter支…...
web学习笔记(六十六)项目总结
目录 1. Suspense标签 2.发布订阅者模式 3.pinia的使用 4.在请求过来的数据添数据 5.设置token和取token 6. 实现触底加载 7.导航守卫判断登录状态。 1. Suspense标签 Suspense主要用于用于处理异步组件加载和数据获取。,使用这个标签可以允许你在组件等待数…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
Shell 解释器 bash 和 dash 区别
bash 和 dash 都是 Unix/Linux 系统中的 Shell 解释器,但它们在功能、语法和性能上有显著区别。以下是它们的详细对比: 1. 基本区别 特性bash (Bourne-Again SHell)dash (Debian Almquist SHell)来源G…...
使用 uv 工具快速部署并管理 vLLM 推理环境
uv:现代 Python 项目管理的高效助手 uv:Rust 驱动的 Python 包管理新时代 在部署大语言模型(LLM)推理服务时,vLLM 是一个备受关注的方案,具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...
多模态大语言模型arxiv论文略读(112)
Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文标题:Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文作者:Jea…...
