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

一些写leetcode的笔记

  1. 标准库中的string类没有实现像C#和Java中string类的split函数,所以想要分割字符串的时候需要我们自己手动实现。但是有了stringstream类就可以很容易的实现,stringstream默认遇到空格、tab、回车换行会停止字节流输出。
#include <sstream>
#include <iostream>int main()
{std::stringstream ss("this apple is sweet");std::string word;while (ss >> word){std::cout << word << std::endl;   // 这里依次输出this、apple、is、sweet四个单词}return 0;
}
  1. 可以使用getline()函数用其他字符分割字符串,第一个参数 - 流中获取数据,第二个参数 - 把数据转换成字符串,第三个参数 - 分隔符。
#include <sstream>
#include <iostream>int main()
{std::string str = "this,is,apple";std::istringstream ss(str);std::string token;while (std::getline(ss, token, ',')) {std::cout << token << '\n';        // 这里依次输出this、is、apple三个单词}return 0;
}
  1. 匿名函数实现一个功能,输入一个由空格分割单词的字符串,就计算出每个单词的出现频率:
unordered_map<string, int> freq;auto insert = [&](string s) {stringstream ss(s);string word;while (ss >> word) {++freq[move(word)];}};insert(s1);
  1. accumulate是numeric库中的一个函数,主要用来对指定范围内元素求和,但也自行指定一些其他操作,如范围内所有元素相乘、相除等。
int main() {vector<int> arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int sum = accumulate(arr.begin(), arr.end(), 0); // 初值0 + (1 + 2 + 3 + 4 +... + 10)int sum = accumulate(arr.begin(), arr.end(), 1, multiplies<int>()); // 初值1 * (1 * 2 * 3 * 4 *... * 10)cout << sum << endl;	return 0;
}
  1. 计算gcd 最大公约数的算法
int gcd(int a, int b){return b ? gcd(b, a % b) : a;
},
  1. C++取均匀随机数的方法
mt19937 gen{random_device{}()};//声明:产生器+种子。
//--上面这俩需要#include<random>
//由于gen的初始化里面也是一个发生器,因此要{}
// random_device先加{}产生一个随机产生器对象,再()产生种子
uniform_int_distribution<int> dis(15);//声明:取数器
int ans = dis(gen);//ans是1~5中均匀概论取到的。
  1. 对一个数组中每个元素进行第三项中函数的判断
return all_of(arr.begin(), arr.end(), [n](int x){ return x %n  == 0; });
  1. 位运算中 x&(x-1) 相当于把 x 的最后一位1去掉:
// 衍生题:统计一个数二进制表示中1的个数
int func(x) 
{ int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; 
}

如果 n是正整数并且 n & (n - 1) = 0,那么 n 就是 2的幂;如果 n是正整数并且 n & (-n) = n,那么 n就是 2的幂。
令 y=x & (x−1),则 y 为 将x的最末位的1改成0的数字。
x除以2 可以通过x>> 1(x右移一位得到),x除以2的余数可以通过 x& 1得到

x&(-x)的用途:
1.可用于获取某个二进制数的最低位1所对应的值
2.求一个偶数能被整除的最大的二次幂

在这里插入图片描述

lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。

在从小到大的排序数组中,

lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回.end()。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回.end()。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

  1. 优先队列-小顶堆
/*优先队列-小顶堆*/static bool cmp(pair<int,int> &m,pair<int,int> &n){return m.second>n.second;}//C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型
//在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。
// 升序队列,先弹小的元素出来:priority_queue
priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(&cmp)> q(cmp);
> 基本数据类型的优先级设置:(即可以直接使用的数据类型),优先队列对他们的优先级设置一般是数字越大的优先级越高,因此队首是优先级最大的那个(如果是 char 类型,则是字典序最大的)。以 int 型为例下面两种是等价的:
> > priority_queue<int>q;
> > priority_queue<int,vector<int>,less<int> >q;
> > 可以发现第二种定义方式的尖括号内多出了两个参数:其中 vector<int>填写的是承载底层数据结构堆 (heap)的容器,如果是其他类型 可写为 vector<char>或vector<char>;
> 
> 
> //构造一个空的优先队列,此优先队列是一个小顶堆
> 
> priority_queue<int,vector<int>,greater<int> > small_heap;
> > 第三个参数 less<int> 则是对第一个参数的比较类,!!less<int> 表示数字大的优先级越大,而 greater<int> 表示数字小的优先级越大。
>
^ ”的异或指的是二进制中,对应的对应二进制位相同时异或为零,相异时异或为一1、任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a 
2、任何数和其自身做异或运算,结果是 0,即 a⊕a=0
3、异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b
4、x=ai⊕aj 等价于 aj=x⊕ai// 通过异或来判断两个数的正负
if (numeratorLong < 0 ^ denominatorLong < 0) {sb.append('-');}
  1. 关于 substr:

//如果我要取索引i到索引j这一段子串,就使用:
substr(i,j-i+1)
// 数字转字符串
string str = to_string( int value ); 
to_string( float value );
to_string( long value );// 数字转字符
s[i]+'0';// 字符转数字
s[i]-'0';// 数字字符串转成数字
char a[]="-100";  char b[]="123";  int c;
c=atoi(a.c_str())+atoi(b.c_str());
printf("c=%d\n",c); //c = 23//判断一个字符是否为字母或者数字:
//字母(不区分大小写):
isalpha();
// 数字
isdigit();
//字母和数字
isalnum();// 字符串转数字:stoi(字符串,起始位置,n进制),将 n 进制的字符串转化为十进制
string s = "12345";
int num1 = stoi(s);
  1. 利用快慢指针来找到链表的中间节点
ListNode* getMidNode (ListNode* head){ListNode* fast = head;ListNode* slow = head;while(fast->next != nullptr && fast->next->next != nullptr){fast = fast->next->next;slow = slow->next;}return slow;}
  1. 在 C++ 中,可以使用 std::map 来实现键值对的有序存储,但是 std::map 默认是按照键(key)的升序进行排序的。希望按照值(value)进行排序,然后在值相同时再按照键进行排序,需要借助一个辅助数据结构来实现。一种常用的方法是使用 std::vector 来存储 std::map 中的键值对,然后对 std::vector 进行排序,并且自定义排序规则。
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>int main() {using namespace std; // 引入命名空间,可以省略 std::// 定义一个 map,假设键为字符串,值为整数map<string, int> myMap = {{"apple", 3},{"orange", 2},{"banana", 1},{"grape", 2}};// 定义一个 vector 来存储 map 中的键值对vector<pair<string, int>> vec(myMap.begin(), myMap.end());// 使用 Lambda 表达式定义排序规则sort(vec.begin(), vec.end(), [](const pair<string, int>& a, const pair<string, int>& b) {if (a.second == b.second) {  // 如果值相同,按照键进行升序排序return a.first < b.first;}return a.second < b.second;  // 否则按照值进行升序排序});// 打印排序后的结果for (const auto& pair : vec) {cout << pair.first << ": " << pair.second << endl;}return 0;
}
  1. 如果我想在unordered_set中存储整数对时,可以使用自定义哈希函数:
using PII = pair<int,int>;auto hash_function = [](const PII& o){return hash<int>()(o.first) ^ hash<int>()(o.second);};unordered_set<PII,decltype(hash_function)> seen(0,hash_function);
  1. 裴蜀定理(或贝祖定理)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。

它的一个重要推论是:a,b互质的充分必要条件是存在整数x,y使ax+by=1.

  1. lamda函数+优先队列的写法:
auto cmp = [&nums1,&nums2](const pair<int,int> &a,const pair<int,int> &b){return nums1[a.first]+nums2[a.second]> nums1[b.first]+nums2[b.second];};priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(cmp)> pq(cmp);
  1. 发现的一个小规律:

在一个环内,如果设置快慢指针,如果 fast 比 slow 的起始位置 前一个,此后 slow走一步,fast走2步,二者最终会在 起始点的 前一个位置(也就是走入下一次环的最后位置) 重合。

(1+2n) % x = n % x , n = x-1时 等式成立

  1. Dilworth定理

对于任意有限偏序集,其最大反链中元素的数目必等于最小链划分中链的数目。此定理的对偶形式亦真。

二 偏序集中的概念

链 : D 中的一个子集 C 满足 C 是全序集 及C中所有元素都可以比较大小

反链 : D 中的一个子集 B 满足 B 中任意非空子集都不是全序集 即所有元素之间都不可以比较大小

链覆盖 : 若干个链的并集为 D ,且两两之间交集为 ∅

反链覆盖 : 若干个反链的并集为 D ,且两两之间交集为∅

最长链 : 所有链中元素个数最多的 (可以有多个最长链)

最长反链 : 所有反链中元素个数最多的 (可以有多个最长反链

偏序集高度 : 最长链的元素个数
偏序集宽度 : 最长反链中的元素个数

最小链覆盖(使链最少)= 最长反链长度 = 偏序集宽度

最小反链覆盖=最长链长度=偏序集深度

该定理可以应用在拦截导弹的题目中,题目问这个序列最少可以划分为多少个非递增序列,根据Dilworth定理,我们只需求最长上升子序列的长度就是答案

相关文章:

一些写leetcode的笔记

标准库中的string类没有实现像C#和Java中string类的split函数&#xff0c;所以想要分割字符串的时候需要我们自己手动实现。但是有了stringstream类就可以很容易的实现&#xff0c;stringstream默认遇到空格、tab、回车换行会停止字节流输出。 #include <sstream> #incl…...

shopify主题开发之template模板解析

在 Shopify 主题开发中&#xff0c;template 文件是核心部分&#xff0c;它们定义了店铺中不同页面的布局和结构。下面将详细介绍 Shopify 主题中的 template 模板。 一、template 文件结构 在 Shopify 主题中&#xff0c;templates 文件夹包含了所有用于生成店铺页面的模板文…...

Zookeeper学习

文章目录 学习第 1 章 Zookeeper 入门1.1 概述Zookeeper工作机制 1.2 特点1.3 数据结构1.4 应用场景统一命名服务统一配置管理统一集群管理服务器动态上下线软负载均衡 1.5 下载zookeeper 第 2 章 Zookeeper 本地安装2.1 本地模式安装安装前准备配置修改操作 Zookeeper本地安装…...

FAT32文件系统详细分析 (格式化SD nandSD卡)

FAT32 文件系统详细分析 (格式化 SD nand/SD 卡) 目录 FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)1. 前言2.格式化 SD nand/SD 卡3.FAT32 文件系统分析3.1 保留区分析3.1.1 BPB(BIOS Parameter Block) 及 BS 区分析3.1.2 FSInfo 结构扇区分析3.1.3 引导扇区剩余扇区3.1.4 …...

通义灵码在Visual Studio上

通义灵码在Visual Studio上不好用&#xff0c;有时候会出现重影&#xff0c;不如原生的自动补全好用&#xff0c;原生的毕竟的根据语法来给出提示的。...

基于SpringBoot的招生宣传管理系统【附源码】

基于SpringBoot的招生宣传管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2系统功能结构设计 4.3数据库设计 4.3.1数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1管理员功能介绍 5.1.1管理员登录 …...

SOT23封装1A电流LDO具有使能功能的 1A、低 IQ、高精度、低压降稳压器系列TLV757P

前言 SOT23-5封装的外形和丝印 该LDO适合PCB空间较小的场合使用&#xff0c;多数SOT23封装的 LDO输出电流不超过0.5A。建议使用时输入串联二极管1N4001,PCB布局需要考虑散热&#xff0c;参考文末PCB布局。 1 特性 • 采用 SOT-23 (DYD) 封装&#xff0c;具有 60.3C/W RθJA •…...

python绘制3d建筑

import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d.art3d import Poly3DCollection# 随机生成建筑块数据 def generate_building_blocks(num_blocks, grid_size100, height_range(5, 50), base_size_range(10, 30)):buildings []for _ in range(…...

机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用。首先阐述了 XGBoost 算法的数学原理及公式&#xff0c;为模型构建提供理论基础。接着利用 kaggle 平台的糖尿病数据集&#xff0c;通过详细的…...

ElasticSearch数据类型和分词器

一、数据类型 1、Text &#xff08;文本数据类型&#xff09; 2、Keyword&#xff08;关键字数据类型&#xff09; 3、Alias&#xff08;别名类型&#xff09; 4、Arrays (集合类型) 5、Boolean&#xff08;布尔类型&#xff09; 6、日期类型 7、Numeric &#xff08;数…...

【云原生监控】Prometheus之PushGateway

Prometheus之PushGateway 文章目录 Prometheus之PushGateway介绍作用资源列表基础环境一、部署PushGateway1.1、下载软件包1.2、解压软件包1.3、编辑配置systemctl启动文件1.4、创建日志目录1.5、加载并启动1.6、监控端口1.7、访问PushGateway 二、 配置Prometheus抓取PushGate…...

sqlalchemy JSON 字段写入时中文序列化问题

JSON字段定义 from sqlalchemy import Column, JSONclass Table(Base):__tablename__ "table"__table_args__ ({"comment": "表名称"})...extra Column(JSON, comment"其他属性")...局部序列化 def create(extra):table Table()#…...

C++ 类域+类的对象大小

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 类定义了一个新的作用域&#xff0c;类的所有成员都在类的作用域中&#xff…...

QT开发:深入详解QtCore模块事件处理,一文学懂QT 事件循环与处理机制

Qt 是一个跨平台的 C 应用程序框架&#xff0c;QtCore 模块提供了核心的非 GUI 功能。事件处理是 Qt 应用程序的重要组成部分。Qt 的事件处理机制包括事件循环和事件处理&#xff0c;它们共同确保应用程序能够响应用户输入、定时器事件和其他事件。 1. 事件循环&#xff08;Ev…...

小米,B站网络安全岗位笔试题目+答案

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…...

微信小程序中巧妙使用 wx:if 和 catchtouchmove 实现弹窗禁止页面滑动功能

大家好&#xff0c;今天我要和大家分享的是在微信小程序开发过程中&#xff0c;如何利用 wx:if 或 wx:elif 来条件性地渲染不同的元素&#xff0c;并结合 catchtouchmove 事件处理函数来解决弹窗弹出时禁止背后页面滑动&#xff0c;而弹窗消失时恢复滑动的功能。 在微信小程序…...

唯徳知识产权管理系统 DownloadFileWordTemplate 文件读取漏洞复现

0x01 产品简介 唯徳知识产权管理系统,由深圳市唯德科创信息有限公司精心打造,旨在为企业及代理机构提供全方位、高效、安全的知识产权管理解决方案。该系统集成了专利、商标、版权等知识产权的全面管理功能,并通过云平台实现远程在线办公,提升工作效率。是一款集知识产权申…...

我在高职教STM32——准备HAL库工程模板(2)

新学期已开始,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过…...

数字化转型的实战法则:全面剖析《数字化专业知识体系》中的落地策略与最佳实践

开启数字化成功的实践路径 随着全球经济加速迈向数字化&#xff0c;企业不再仅仅依赖传统商业模式&#xff0c;而是通过技术创新提升竞争力与市场地位。然而&#xff0c;数字化转型的成功不仅依赖于战略思维&#xff0c;更需要精准的实战执行。《数字化专业知识体系》&#xf…...

远程桌面内网穿透是什么?有什么作用?

远程桌面内网穿透指的是通过特定技术手段&#xff0c;将处于内网中的电脑或服务器&#xff0c;通过外部网络&#xff08;互联网&#xff09;进行访问。内网穿透的主要作用是解决在内网环境下&#xff0c;远程设备与外部互联网之间的连接问题&#xff0c;允许用户从外部访问内网…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...