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()是一个成员函数,用于获取指向容器( 如vectorlistdequearray等)最后一个元素的反向迭代器
反向迭代器是一种特殊的迭代器,它按照与正常迭代器相反的方向遍历容器

当你调用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),如vectorlistdeque(双端队列)setmap等,用于存储和管理数据这些容器类都是模板类,可以存储任何类型的数据(只要该类型支持必要的操作,如:拷贝和赋值)
  • 包含一系列算法(algorithms),用于处理存储在容器中的数据这些算法包括排序、查找、复制、替换等STL的算法都是高度通用的,并且不依赖于特定的数据结构,因此可以应用于任何支持STL迭代器(iterator)的容器
  • 包含一些迭代器(iterator),用于遍历和访问容器中的元素迭代器是一种设计模式,它提供了一种方法,用于遍历容器中的数据,而无需了解容器的底层实现细节STL的迭代器分为五类:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器

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

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

相关文章

Oracle自动创建分区

一、需要分区的表 create table PARTITION_TABLE_INFO ( table_name VARCHAR2(500), comments VARCHAR2(500), enable VARCHAR2(500) default Y ) / comment on table PARTITION_TABLE_INFOis 分区维护表 / comment on column PARTITION_TABLE_INFO.table_name is …

Mybatis plus:Wrapper接口

一、介绍 MyBatis-Plus 提供了一套强大的条件构造器&#xff08;Wrapper&#xff09;&#xff0c;用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件&#xff0c;无需编写繁琐的 SQL 语句&#xff0c;从而提高开发效率并减少 SQL 注入的风险。 …

springCloud组件专题(四) --- sentinel

前言 限流&#xff0c;熔断降级概念 限流&#xff1a;顾名思义&#xff0c;就是对一个资源&#xff08;服务或者接口都可以算资源&#xff09;的访问进行限制。简单来说就是限制单位时间内允许资源被访问的次数。常见的算法就是令牌桶算法。 降级&#xff1a;降级其实是一种资源…

IBM IMM1服务器硬件监控指标解读

在复杂多变的IT环境中&#xff0c;服务器的稳定运行对于保障业务的连续性至关重要。IBM IMM1&#xff08;Integrated Management Module 1&#xff09;作为IBM服务器的一个重要组件&#xff0c;提供了强大的远程管理和监控功能。 监控易作为一款专业的IT基础设施监控软件&#…

实际中路由器故障处理方法

1.路由器的部分功能无法实现 &#xff08;1&#xff09;故障现象&#xff1a;路由器配置完全正确&#xff0c;但是有些功能却不能实现。 &#xff08;2&#xff09;故障原因&#xff1a;如果是在确保路由器配置正确的前提下&#xff0c;那么问题应该就在路由器的软件系统上。 &…

【鸿蒙】ERROR_GET_BUNDLE_INSTALLER_FAILED

错误信息 [ERROR_GET_BUNDLE_INSTALLER_FAILED] Troubleshooting guide $ hdc file send D:\Huawei\devEcoProjects\entry\build\default\outputs\default\entry-default-unsigned.hap /sdcard/e8a215ea7be1444197e6a58ebda7721f/entry-default-unsigned.hap Error while Depl…

26.3 Django路由层

1. 路由作用 在Django中, URL配置(通常称为URLconf)是定义网站结构的基础, 它充当着Django所支撑网站的目录. URLconf是一个映射表, 用于将URL模式(patterns)映射到Python的视图函数或类视图上. 这种映射机制是Django处理HTTP请求的基础, 它决定了当客户端发送请求时, Django如…

什么是DND网络?

DND网络通常指的是“无人机网络”&#xff08;Drone Network&#xff09;&#xff0c;它是通过多个无人机&#xff08;Drones&#xff09;之间的相互连接和通信形成的网络系统。无人机网络是一种特殊类型的无线自组织网络&#xff08;Wireless Ad-hoc Network&#xff09;&…

Java中的线程安全与同步技术

Java中的线程安全与同步技术 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中的线程安全问题以及如何利用同步技术来保证多线程环境下的…

免费ddns工具,快解析DNS解析使用教程

DDNS&#xff08;Dynamic Domain Name Server&#xff09;,中文叫动态域名解析&#xff0c;主要用于没有固定公网ip的网络环境下&#xff0c;使用一个固定的域名&#xff0c;解析动态变化的ip地址&#xff0c;达到远程访问的目的。 众所周知&#xff0c;目前公网ip资源非常紧缺…

Golang | Leetcode Golang题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; const L 10 var bin map[byte]int{A: 0, C: 1, G: 2, T: 3}func findRepeatedDnaSequences(s string) (ans []string) {n : len(s)if n < L {return}x : 0for _, ch : range s[:L-1] {x x<<2 | bin[byte(ch)]}cnt : map[int]in…

OLAP(联机分析处理)和OLTP(联机事务处理)详细介绍与发展历程

OLAP&#xff08;Online Analytical Processing&#xff0c;联机分析处理&#xff09;和OLTP&#xff08;Online Transaction Processing&#xff0c;联机事务处理&#xff09;是数据库系统中两种不同的处理模式&#xff0c;各自有不同的应用场景和技术特点。以下是对OLAP和OLT…

解决MNIST数据集下载慢,或者Http连接失败问题

下载MNIST数据集时遇到速度慢的问题 解决&#xff1a;手动从MNIST数据集的官方网站直接使用下载好的数据文件&#xff0c;放到指定目录下&#xff0c;再进行调取即可。 手动下载地址&#xff1a;MNIST官网 http://yann.lecun.com/exdb/mnist/ 【仍需要连接外网】 这里我提供…

【强化学习】DQN走迷宫(一)

书接上回&#xff0c;《【强化学习】Q-learning训练AI走迷宫》&#xff08;去年的&#xff09; 本节讲述在相同的环境下&#xff0c;使用DQN来走迷宫。&#xff08;假设我们已经了解相关基础。&#xff09; 一. 概念重温 1.1 什么是DQN&#xff1f; 让我们从颗粒度上对齐一下…

Mybatis分页查询,同时返回total

在垃圾项目中一般都是使用mybatis plus自动返回Page,但是涉及到多表联合或者等等情况最终还是要使用mybatis进行手写sql查询,所以有此文章以便后续使用查询. 首先mysql需要支持多条查询语句,在mysql配置url后加上: &allowMultiQueriestrue&useAffectedRowstrue Mapper…

C语言 | Leetcode C语言题解之第188题买卖股票的最佳时机IV

题目&#xff1a; 题解&#xff1a; int maxProfit(int k, int* prices, int pricesSize) {int n pricesSize;if (n 0) {return 0;}k fmin(k, n / 2);int buy[k 1], sell[k 1];memset(buy, 0, sizeof(buy));memset(sell, 0, sizeof(sell));buy[0] -prices[0];sell[0] 0…

上证所抓包实战

第 2 页jsonCallBack 回调函数Request Headers爬取股票列表下载时间戳Initiator在 Network 中抓到的包,有 Headers、Payload、Preview、Response、Initiator、Timing、Cookies 面板,从这些面板中获取有用的信息来写脚本。 上海证券交易所 https://www.sse.com.cn/assortment…

Rsync未授权访问-vulfocus

1.原理 Rsync是linux上文件传输的协议&#xff0c;如果有返回直接可以看到&#xff0c;部分主机使用协议的时候不会加密码&#xff0c;就容易造成未授权访问漏洞 2.复现 打开vulfocus.io,搜索rsync关键字&#xff0c;打开环境 在自己的主机上去连接远程服务器&#xff1a; r…

项目总结-前端路由hash和history

项目总结-前端路由hash和history router模块 路由需要实现的功能 当浏览器地址发生变化的时候&#xff0c;切换页面点击浏览器后退前进的时候&#xff0c;网页内容发生变化刷新浏览器&#xff0c;网页加载当前路由对应内容 路由主要是通过监听事件&#xff0c;并利用js实现…

【AI应用探讨】—小模型应用场景(总述)

目录 1. 线性模型 金融行业风险评估&#xff1a; 经济学分析与预测&#xff1a; 2. 决策树 信贷审批&#xff1a; 医疗诊断&#xff1a; 3. 朴素贝叶斯 垃圾邮件过滤&#xff1a; 社交媒体情感分析&#xff1a; 4. 小型神经网络 图像识别&#xff1a; 语音识别&…