算法刷题随记
前言突然想记录自己算法刷题的一些笔记,方便自己以后查阅。按代码随想录 (programmercarl.com)里的顺序进行学习哈,后面可能会有变动。能坚持多久我也不知道hhh。
随便说2024年6月28日 晚上快12点
创建这个文档,然后准备去睡觉了 -V-
算法
二分查找
双指针法
滑动窗口
模拟行为
题目数组二分查找704. 二分查找 - 力扣(LeetCode) 2024年6月28日 23点54分
比较简单,注意一下mid=(left+right)>>1中的left+right可能会溢出,可以写成:
1mid = left + ((right - left) >> 1);
移除元素27. 移除元素 - 力扣(LeetCode) 2024年6月30日 19点54分
O(n) O(1)的做法是使用双指针法
长度最小的子数组209. 长度最小的子数组 - 力扣(LeetCode) 2024年7月2日 23点56分
使用双指针+滑动窗口思想 (若有负数则用不了)
螺旋矩阵II59. 螺旋矩阵 II - 力扣(LeetCode) ...
ElasticSearch学习笔记
ElasticSearch
笔记学习视频:【尚硅谷】ElasticSearch教程入门到精通(基于ELK技术栈elasticsearch 7.x+8.x新特性)_哔哩哔哩_bilibili
ElasticSearch官网:Elasticsearch:官方分布式搜索和分析引擎 | Elastic
简介The Elastic Stack, 包括 Elasticsearch、Kibana、Beats和Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES,ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。这里和MySQL进行对比。
graph TD
subgraph a[ElasticSearch]
Index
Type
Documents
...
Dubbo学习笔记
Dubbo
视频学习:动力节点Dubbo教程(2020最新版)Dubbo项目实战_哔哩哔哩_bilibili
简介Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案、服务治理方案。
官网:Apache Dubbo
服务提供者(Provider):暴露服务的服务提供方;服务提供者在启动时向注册中心注册自己的服务。
消费者(Consumer):调用远程服务的服务消费方;服务消费者在启动时,向注册中心订阅自己所需的服务;服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry): 服务注册与发现的注册中心;注册中心返回服务提供者地址列表给消费者;如果有变更,注册中心将基于长连接推送变更数据给消费者。
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中 ...
Zookeeper学习笔记
Zookeeper
观看千锋最新Zookeeper集群教程-全网最全Zookeeper应用及原理分析课程_哔哩哔哩_bilibili进行学习。
部分笔记来源于网络。
本文使用的Zookeeper版本是3.7.1
分布式协调组件
graph LR
用户 ==> Nginx
--> a[服务A-1<br/>int flag=true] --> r
b[服务A-2<br/>int flag=true] --> r
r[分布式协调中心Zookeeper<br>Znode节点:flag=true<br>一旦节点发生改变,<br>就会通知所有监听改变自己的值-Watch机制<br>分布式锁可以让分布式服务处于无状态]
在分布式系统中,需要有zookeeper作为分布式协调组件,协调分布式系统中的状态
分布式锁
zk在实现分布式锁上,可以做到强一致性,关于分布式锁的相关知识,会在之后的ZAB协议中介绍
无 ...
Redis学习笔记
Redis学习【尚硅谷】Redis 6 入门到精通 超详细 教程 ,
记录笔记。
简介
Redis是一个开源的key-value存储系统。
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set —有序集合)和hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,Redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
并且在此基础上实现了master-slave(主从)同步。
安装RedisDownload | Redis
已Redis6.2.10为例
检查gcc环境gcc --version
安装gcc:yum install gcc
安装步骤:
下载redis-6.2.10.tar.gz到/opt (其它目录也行)
执行tar -zx ...
Linux学习笔记
Linux学习笔记Linux学习记录,按照韩顺平老师视频进行学习。
目录结构
Linux 系统目录结构 | 菜鸟教程
基本介绍
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”。
在Linux世界里,一切皆文件。
树状目录结构:
123456789101112131415161718192021/├── bin -> usr/bin├── boot├── dev├── etc├── home├── lib -> usr/lib├── lib64 -> usr/lib64├── lost+found├── media├── mnt├── opt├── proc├── root├── run├── sbin -> usr/sbin├── srv├── sys├── tmp├── usr└── var
目录解释
/bin [常用] (/usr/bin、 /usr/local/bin)是Binary的缩写,这个目录存放着最经常使用的命令
/sbin (/usr/sbin、 /usr/local/sbin)s就是Super User的 ...
快速幂算法(例:a^b mod p)
介绍快速幂(Exponentiation by squaring,平方求幂)是一种简单而有效的小算法,它可以以O(log n)的时间复杂度计算乘方。快速幂不仅本身非常常见,而且后续很多算法也都会用到快速幂。
为什么要使用快速幂?比如要计算以下式子:
9^{10}=?传统算法是
9^{10} = 9*9*9*9*9*9*9*9*9*9计算机要通过9次计算才能得出答案。而快速幂的方法就是通过平方来减少计算次数:
9^{10}=(9*9)^{5}=(81*81)^{2}*81这样子就只需要4次。
这样的时间复杂度是O(log n),当次方很大时可以节省很多时间。
算法实现非递归版12345678910fast_power(a, b) ans = 1 while(b) if b % 2 == 1 //当幂为奇数时 ans *= a b -= 1 else a *= a b /= 2 return ans
在b % 2 == 1运行完成后,b必定是偶数,接下来会再 ...
最小生成树(Minimum Spanning Tree)
前言例题:AizuOJ ALDS_12A & AizuOJ GRL_2_A
本题可以使用普里姆(Prim)算法或克鲁斯卡尔(Kruskal)算法进行实现。
两种算法的简单比较:
时间复杂度
最适合
Prim
O(n^2)
稠密图
Kruskal
O(E * log E),E为边数
稀疏图
视频:最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示
以下代码是 AizuOJ GRL_2_A 的解法。
普里姆算法代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include <iostream>#include <cstdio>#include <vector>#include <limits.h>using namespace std;#define MAX 10000typedef pair ...
Hello World
emmm…