LeetCode 42. 接雨水
刷到一个笑话:字节跳动员工是不是个个都会接雨水。顺便记录一下这道题吧。 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 1234输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 显然需要算出接满水之后的状态数组,即每一个位置的水面高度,然后减掉原本的柱子高度,对数组求和即可。 如何计算水面高度: 如果当前位置的高度大于左右两侧的高度,那么该位置的水面高度就是当前位置的高度,其实就是没有接水; 如果当前位置的高度小于左右两侧的高度,那么该位置的水面高度就是左右两侧的高度中的最小值。 所以问题归结于计算当前位置左侧的最高高度和右侧的最高高度,两次遍历即可。 12345678910111213141516171819202122232425262728class Solution {public: int...
Linux 后台任务笔记
学习整理一下关于后台任务相关的内容,进一步的分析必须从Linux中的进程,信号等机制出发,但是我对此没啥兴趣,这里只是从实用的角度进行学习,浅尝辄止。 通常在shell中执行的任务都是前台任务,即任务会占用前台,在任务结束之前无法进行下一个任务。在命令结尾使用&可以将命令使用后台进程执行,例如 1./test.sh & 其中的测试脚本在不断写入日志,每隔4秒写入一次 12345678#!/bin/bashlogfile="time_log.txt"while true; do echo "$(date)" >> "$logfile" sleep 4done 使用jobs命令可以查看当前的后台任务,每一个后台任务都有独立的序号(注意不是pid),例如 1[1]+ Running ./test.sh...
Docsify 搭建记录
需要一个小型的在线文档系统,Docsify可以满足需求,记录一下搭建记录,主要参考Docsify官方的中文文档。 本地搭建 前提:本地需要安装 nodejs 并完成相应配置。 新建DocBase/文件夹,在其中本地安装 docsify-cli 1npm i docsify-cli -g 由于 docsify-cli 不是全局安装的,存在找不到 hexo 命令的问题,对于 Windows 可以通过临时添加路径到 PATH 解决,在 DocBase 目录下执行 1$env:Path += ";$((Get-Item -Path .\node_modules\.bin -Force).FullName)" 初始化项目 1docsify init ./docs 初始化过程会自动新建./docs子文件夹,并生成如下文件: index.html:项目入口 README.md:内容会被渲染成项目主页 .nojekyll:防止Github忽视下划线开头文件 使用下面的命令可以在本地预览 123cd ./docsdocsify serve# or docsify...
Cpp 函数重载与函数标识符
函数重载 重载(Overloading)是 C++ 为允许同名函数使用多种参数列表以及多种实现版本而提供的机制,C语言是不支持的。 具体来说,函数重载指在同一个作用域中,定义多个具有相同名称但参数列表不同(个数或类型不同)的函数,这一组函数会构成相互重载的关系, 它们之间可以具有相同或不同的返回值类型。 例如 1234567891011121314#include <iostream>int add(int a, int b) { return a + b; }double add(double a, double b) { return a + b; }int add(int a, int b, int c) { return a + b + c; }int main() { std::cout << add(1, 2) << "\n"; std::cout << add(1.5, 2.3) <<...
Linux 学习笔记:控制台,终端,tty
整理一下关于下面这些概念的学习: 终端(terminal) 控制台(console) 电传打字机...
Linux 服务器配置笔记
记录一下我在服务器上鼓捣了什么,系统版本是CentOS7.9,由于普通用户没有 root 用户权限,服务器还不联网,不能使用傻瓜式的安装,只能在用户家目录下使用源码编译的方式安装软件。 虽然我可以登root账户,但是root操作有风险,可能把公共服务器搞坏了,还是选择用普通账户操作。 tmux 安装过程主要参考官方wiki和非root用户安装tmux - 三三仨仨的文章 - 知乎。 下载 tmux-3.2a.tar.gz,还需要两个依赖: libevent-2.1.12-stable.tar.gz ncurses.tar.gz (ncurses-6.3) 如果可以通过包管理器下载依赖,当然更好。 完整安装过程如下 1234567891011121314151617181920cd ~/tmptar -zxvf libevent-2.1.12-stable.tar.gzcd libevent-2.1.12-stable/./configure --prefix=$HOME/.local --enable-sharedmake && make...
Cpp 并行计算学习笔记
基本概念 首先学习几组基本概念: 并发(Concurrency)/并行(Parallelism) 同步(Synchronous)/异步(Asynchronous) 进程(Process)/线程(Thread) 并发 / 并行 并发指的是多个任务在同一时间段内被同时推进,可能是同时执行不同的任务,也可能是频繁交替执行每一个任务的一小部分 并行指的是多个任务在同一时间段内真正同时执行 举个例子: 学生在课后可以并发地完成每一个科目的作业:一会写语文作业,一会又切换回写数学作业,切换可以非常频繁,但是不可能同时写两科作业,也就是不能并行 人体的消化系统的任务和循环系统的任务在并行地执行:在同一时间内,肠道蠕动和血液循环在同时进行,不可能说心脏跳动时就让肠道蠕动暂停 同步 /...
GCC 源码编译安装(离线,普通用户)
gcc 的非 root 用户离线编译安装比其他的软件的源码安装都要复杂:因为它有依赖,在服务器上无法通过联网下载,要提前下载依赖的压缩包,而且gcc的编译时间很长。 安装过程主要参考CentOS7 离线升级安装gcc到6.3.0 和Linux 非root安装GCC9.1.0 下载依赖 在官网或者镜像网站下载 gcc-11.4.0.tar.gz,传到服务器上解压为~/tmp/gcc-11.4.0 进入~/tmp/gcc-11.4.0子目录,需要解决下载依赖的问题。在可以联网的情况下,直接执行自带的下载依赖的脚本 ./contrib/download_prerequisites。如果服务器无法联网,则需要手动下载处理 查看上述脚本,找到四个必要的依赖 gmp,mpfr,mpc,isl 以及对应的具体版本,例如...
FastFetch 小工具
介绍 FastFetch 是一款类似于 neofetch 的轻量级、快速的信息获取工具,可以在命令行中快速查看系统信息, 包括显示系统的硬件、软件和操作系统等关键信息,同时支持自定义输出格式。 安装 Windows上直接通过winget安装 1winget install fastfetch Ubuntu上可以通过包管理器安装 12sudo add-apt-repository ppa:zhangsongcui3371/fastfetchsudo apt install fastfetch 使用 直接通过 fastfetch 命令执行即可,效果例如
Cpp 小技巧/冷知识记录
记录一下C++的小坑/冷知识。 int8_t 输入 虽然C++提供了很多数据类型,但是最基础的其实还是有无符号的字符和整数浮点数等,其他的数据类型是对它们的简单包装,因此还是表现原本的行为,例如下面两种类型在msvc可能的定义为 12typedef signed char int8_ttypedef unsigned char uint8_t 这表明int8_t和uint8_t实际上还是char类型的重命名,这会影响很多地方的处理,例如cin在接收字符流输入时,会根据接收变量的数据类型进行转换:如果输入1,可能会被解释为ASCII字符1(值为49),也可能会被解释为整数1,这完全取决于接收变量的类型 1234567char a; cin >> a; // '1' = 49int b; cin >> b; // 1int8_t c; cin >> c; // '1' = 49uint8_t d; cin >> d; // '1' =...