- 博客(689)
- 收藏
- 关注
原创 算法竞赛进阶指南-基本算法
lowbit(n)定义为非负整数n在二进制表示下“最低位的1及其后边所有的0”构成的数值。例如n=10的二进制表示为1010,则lowbit(n) = 2 = ‘10’,lowbit(n) = n & (~n +1) = n & (-n)(树状数组的一个基本运算)lowbit运算配合Hash可以找出整数二进制表示下所有是1的位,所花费的时间与1的个数同级。为了打到这一目的,只需不断把n赋值为n - lowbit(n),直到n==0.例如: n = 9 = ‘1001’..
2021-08-21 11:12:45 647
原创 52. N皇后 II
public int totalNQueens(int n) { if (n == 1) return 1; // 第i行的皇后放在那一列 int[] records = new int[n]; return process(records, n, 0); } private int process(int[] records, int n, int rowIdx) { if (rowIdx == n) {
2021-08-16 09:35:06 233
原创 37. 解数独
public void solveSudoku(char[][] board) { if (board.length == 0 || board[0].length == 0) return; solve(board); } private boolean solve(char[][] board) { for (int i = 0; i < board.length; i++) { for (
2021-08-13 09:48:32 176
原创 Java实现lower_bound()和upper_bound()
lower_bound()函数lower_bound()在**[lo, hi)进行二分查找,返回大于或等于**target的第一个元素的位置。如果所有元素都小于target,则返回hi.private int lower_bound(int[] nums, int lo, int hi, int target) { while (lo < hi) { int mid = lo + (hi - lo) / 2; if (target &
2021-08-12 08:56:10 905
原创 Go数据类型
Go的数据类型一共分为四大类:基础类型、聚合类型、引用类型和接口类型。基础类型分为:整数、浮点数、复数、布尔值、字符串、常量聚合类型包括:数组、结构体引用类型包括:指针、slice、map、函数、通道接口类型基础类型整数:// int8 is the set of all signed 8-bit integers.// Range: -128 through 127.type int8 int8// int16 is the set of all signed 16-bit in
2021-03-25 16:04:56 287
原创 中文数字转阿拉伯数字 数字转换
https://www.d5.nz/read/sfdlq/text-part0000_split_030.html Map<Character, Integer> chnUnitMap = new HashMap<>(); Map<Character, Integer> chnNumMap = new HashMap<>(); int[] value = {10, 100, 1000, 10000, 100000000}; bool
2021-01-17 16:26:22 602
原创 阿拉伯数字转中文数字 数字转换
https://www.d5.nz/read/sfdlq/text-part0000_split_029.html private char[] chnNumChar = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'}; private String[] chnUnitSection = { "", "万", "亿", "万亿"}; private String[] chnUnitChar = { "", "十", "百", "千
2021-01-17 14:38:31 860
原创 合并k个有序数组
// 1,基于排序申请数组,在数组内进行排序// 2, 基于归并// 感觉空间复杂度太大public int[] mergeArrays(List<int[]> arrays) { if (arrays == null || arrays.size() == 0) return new int[0]; return mergeArrays(arrays, 0, arrays.size()-1); } private i
2021-01-16 15:02:37 482
原创 毒蘑菇
作者:克拉克华链接:https://www.nowcoder.com/discuss/507047?type=all&order=time&pos=&page=1&channel=-1&source_id=search_all_nctrack来源:牛客网从起点开始接下来有N个方块,相邻方块间的距离都为1,每个方块上有增加体力的食用蘑菇或减少体力的毒蘑菇,蘑菇带来的体力改变是已知的。一个人初始体力为m,每次可以往前跳任意个方块,体力耗尽就会死掉。每跳一次消耗的体力
2021-01-15 10:40:17 1696 4
原创 191. 位1的个数 剑指 Offer 15 二进制中1的个数
public int hammingWeight(int n) { int bits = 0; int mask = 1; for (int i = 0; i < 32; i++) { if ((n & mask) != 0) { bits++; } mask <<= 1; } return b
2021-01-14 10:48:32 111
转载 CPU中的指令周期、CPU周期和时钟周期
https://zhuanlan.zhihu.com/p/908299221,指令周期指令周期:是指计算机从取值到执行执行完毕的时间计算机执行指令的过程可以分为以下三个步骤:Fetch(取指),也就是从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。Decode(译码),也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是 R、I、J 中的哪一种指令,具体要操作哪些寄存器、数据或者内存地址。Ex
2021-01-08 14:50:56 21430
原创 ELF(Executable and Linkable Format)文件格式
.text:已编译程序的机器代码。.rodata:只读数据,比如printf语句中的格式串和开关语句的跳转表。.data:已初始化的全局和静态变量。局部变量在运行时被保存在栈中,既不出现在.data节中,也不出现在.bss节中。.bss:未初始化的全局和静态变量,以及所有被初始化为0的全局和静态变量。.symtab:一个符号表,它存放在程序中定义和引用的函数和全局变量的信息。.rel.text:一个.text节中位置的列表,当链接器把这个目标文件和其他文件组合式,需要修改这些位置。.rel..
2021-01-08 14:11:35 335
转载 动态库与静态库的区别?优缺点?
https://www.pianshen.com/article/4047888938/区别1,命名方式不同静态库libxxx.a:库名前加”lib“,后缀用”.a“,"xxx"为静态库名/动态库libxxx.so:库名前加"lib",后缀变为".so"。2,链接时间不同静态库的代码时在编译过程中被加载入程序中,动态库的代码时当程序运行到相关函数才调用动态库的相关函数。3,链接方式不同静态库的链接是将整个函数库的所有数据在编译时都整合(复制???)进了目标代码。动态库的链接是程
2021-01-08 13:51:33 2086
原创 MySQL char和varchar
1.mysql中char与varchar的区别char:定长,效率高,一般用于固定长度的表单提交数据存储;例如:身份证号,手机号,电话,密码等;varchar:不定长,效率偏低2.varchar类型的变化MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0-255或者1~255(根据不同版本数据库来定)。varchar在MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和
2020-12-22 10:37:31 342
原创 MySQL InnoDB存储引擎下的行格式与页格式
InnoDB存储引擎是面向行的,也就是说数据是按照行进行存放的。常用的行记录格式有Compact和Redundant。Compact行记录格式Compact行记录的格式如下变长字段长度列表NULL标志位记录头信息行1数据行2数据…1,非NULL变长字段列表按照行的顺序逆序放置的若行的长度小于255字节,用1字节表示若行的长度大于255字节,用2字节表示是因为VARCHAR类型最大长度限制为655352,NULL标志位该位置指示了该行数据中是否有NULL值,
2020-12-21 20:54:28 224 1
原创 MTU(最大传输单元)
最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500字节和1492字节。链路层的这个特性称为MTU,即最大传输单元。如果IP层有一个数据报要传,而且数据帧的长度比链路层的MTU还大,那么IP层就需要进行分片( fragmentation),即把数据报分成干片,这样每一片就都小于MTU。IP协议除了具有路由寻址功能外,另一个重要的功能就.
2020-12-21 15:15:53 1163
原创 B-Tree B树数据结构
public class BTree<Key extends Comparable<Key>, Value> { // max children per B-tree node = M-1 // (must be even and greater than 2) // 每个节点不超过M-1 children,一旦超过则分裂,M为 > 2的偶数 private static final int M = 4; private Node ro
2020-10-01 19:28:48 133
原创 Longest Repeating Substring + 最长重复子串 + 后缀数组
public class LongestRepeatedSubstring { // Do not instantiate. private LongestRepeatedSubstring() { } /** * Returns the longest common string of the two specified strings. * * @param s one string * @param t the other str
2020-10-01 09:40:48 167
原创 641. 设计循环双端队列
class MyCircularDeque { int size = 0; int[] nums; int start = 0; int end = -1; /** Initialize your data structure here. Set the size of the deque to be k. */ public MyCircularDeque(int k) { nums = new int[k]; } /**
2020-09-29 13:44:08 118
原创 622. 设计循环队列
class MyCircularQueue { final int[] nums; int len = 0, front = 0, rear = -1; /** Initialize your data structure here. Set the size of the queue to be k. */ public MyCircularQueue(int k) { nums = new int[k]; } /** Insert
2020-09-29 13:12:29 135
原创 187. 重复的DNA序列
public List<String> findRepeatedDnaSequences(String s) { List<String> res = new ArrayList<>(); Set<String> resSet = new HashSet<>(); if (s.length() < 10) return res; Set<String> set = n
2020-09-27 09:41:15 74
原创 179. 最大数
public String largestNumber(int[] nums) { String[] strs = new String[nums.length]; for (int i = 0; i < nums.length; i++) { strs[i] = String.valueOf(nums[i]); } Arrays.sort(strs, (s1, s2)->((s2+s1).compare
2020-09-26 16:49:22 67
原创 174. 地下城游戏
public int calculateMinimumHP(int[][] dungeon) { int m = dungeon.length; int n = dungeon[0].length; int[][] dp = new int[m+1][n+1]; for (int i = 0; i <= m; i++) { Arrays.fill(dp[i], Integer.MAX_VALUE);
2020-09-26 16:13:46 109
原创 173. 二叉搜索树迭代器
class BSTIterator { Deque<TreeNode> stack; public BSTIterator(TreeNode root) { stack = new ArrayDeque<>(); leftInOrder(root); } private void leftInOrder(TreeNode node) { while (node != null) {
2020-09-26 15:26:52 64
原创 171. Excel表列序号
public int titleToNumber(String s) { int n = s.length(); int res = 0; for (int i = 0; i < n; i++) { int t = s.charAt(i) - 'A' + 1; res = res * 26 + t; } return res; }
2020-09-26 14:39:46 87
原创 168. Excel表列名称
public String convertToTitle(int n) { StringBuilder sb = new StringBuilder(); String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while (n != 0) { if (n % 26 == 0) { sb.append('Z'); n = n / 26 - 1;
2020-09-26 14:32:03 88
原创 166. 分数到小数
public String fractionToDecimal(int numerator, int denominator) { if (numerator == 0) { return "0"; } StringBuilder sb = new StringBuilder(); if (numerator < 0 ^ denominator < 0) { sb.append("-
2020-09-26 14:10:31 115
原创 152. 乘积最大子数组
public int maxProduct(int[] nums) { int n = nums.length; int[] maxF = new int[n]; int[] minF = new int[n]; System.arraycopy(nums, 0, maxF, 0, n); System.arraycopy(nums, 0, minF, 0, n); for (int i = 1; i <
2020-09-26 10:20:48 106
原创 151. 翻转字符串里的单词
public String reverseWords(String s) { String[] strs = s.split(" "); StringBuilder sb = new StringBuilder(); for (int i = 0; i < strs.length; i++) { String str = strs[i]; if (strs[i].length() == 0) cont
2020-09-26 09:38:53 107
转载 https
https://www.cnblogs.com/happystudyhuan/p/12286076.htmlhttp的主要缺点:通信使用明文(不加密),内容可能会被窃听不验证通信方的身份,因此有可能遭遇伪装无法证明报文的完整性,所以有可能已遭篡改https = http + 加密 + 认证 + 完整性保护对称密钥加密非对称加密公钥加密,私钥解密。私钥加密,公钥解密。报文完整性确保报文的确来自通信的对方,而不是其他人该报文在途中没有被修改密码散列函数散列函数以m为输入,并
2020-09-24 13:56:34 466
转载 SSL协议握手过程
https://www.cnblogs.com/piyeyong/archive/2010/07/02/1770208.htmlSSL建立握手连接目的:身份的验证,client与server确认对方是相连接的,而不是第三方冒充的,通过证书实现client和server交换session key,用于连接后数据的传输加密和hash校验简单的SSL握手连接过程(仅server端交换证书给client):client发送ClientHello,指定版本,随机数(RN),所有支持的密码套件(Ciph
2020-09-24 13:48:04 198
原创 LeetCode 311 稀疏矩阵的乘法
public int[][] multiply(int[][] A, int[][] B) { int m = A.length; if (m == 0) return new int[0][]; int s1 = A[0].length; int s2 = B.length; if (s2 == 0) return new int[0][]; int n = B[0].len
2020-09-22 10:05:03 171
转载 实现分布式锁的三种实现方式
https://mp.weixin.qq.com/s/xcd8NWYMzpVJ3UKlGPIt9g基于数据库的实现方式基于数据库的实现方式的核心思想是:在数据库中创建一个表,表中包含方法名等字段,并在方法名字段上创建唯一索引,想要执行某个方法,就使用这个方法名向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁。创建一个表:想要执行某个方法,就使用这个方法名向表中插入数据:因为我们对method_name做了唯一性约束,这里如果有多个请求同时提交到数据库的话,数据库会保证
2020-09-21 16:26:47 99
转载 限流算法
https://www.infoq.cn/article/Qg2tX8fyw5Vt-f3HH673固定窗口计数器固定窗口计数器算法概念如下:将时间划分为多个窗口;在每个窗口内每有一次请求就将计数器加一;如果计数器超过了限制数量,则本窗口内所有的请求都被丢弃当时间到达下一个窗口时,计数器重置。固定窗口计数器是最为简单的算法,但这个算法有时会让通过请求量允许为限制的两倍。考虑如下情况:限制 1 秒内最多通过 5 个请求,在第一个窗口的最后半秒内通过了 5 个请求,第二个窗口的前半秒内又通过了
2020-09-21 16:07:47 170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人