前言
收集字节codetop,牛客的算法题,codetop以没做过的为主
国际电商
907. 子数组的最小值之和 - 力扣(LeetCode)
91. 解码方法 - 力扣(LeetCode)
求解完全二叉树的最右边的节点
33. 搜索旋转排序数组 - 力扣(LeetCode)
409. 最长回文串 - 力扣(LeetCode)
88. 合并两个有序数组 - 力扣(LeetCode)
25. K 个一组翻转链表 - 力扣(LeetCode)
42. 接雨水 - 力扣(LeetCode)
最大活跃线程数:数组a和数组b,a有序,b无序,a表示在某一时候进入到线程池的线程,b表示在某一时刻杀掉了一些线程。问线程池最大活跃线程数目。使用双指针。
61. 旋转链表 - 力扣(LeetCode)
386. 字典序排数 - 力扣(LeetCode)
162. 寻找峰值 - 力扣(LeetCode)
后序遍历非递归
124. 二叉树中的最大路径和 - 力扣(LeetCode)
消消乐,规定了n个消除,比如aabbcccc,4,输出是aabb:
public static String eliminate(String s, int n) {
// 两个栈:一个存字符,一个存对应的计数
Stack<Character> charStack = new Stack<>();
Stack<Integer> countStack = new Stack<>();
for (char c : s.toCharArray()) {
// 如果栈不为空且栈顶字符与当前字符相同,则增加计数
if (!charStack.isEmpty() && charStack.peek() == c) {
countStack.push(countStack.pop() + 1);
} else {
// 否则,压入新字符,并初始化计数为1
charStack.push(c);
countStack.push(1);
}
// 如果计数达到n,则同时弹出字符和计数
if (countStack.peek() == n) {
charStack.pop();
countStack.pop();
}
}
// 构建最终字符串
StringBuilder result = new StringBuilder();
while (!charStack.isEmpty()) {
char currentChar = charStack.pop();
int count = countStack.pop();
for (int i = 0; i < count; i++) {
result.insert(0, currentChar); // 插入到字符串的前面
}
}
return result.toString();
}