【算法】合集(待整理)

1、
前缀和 算法不懂看这个链接 https://mp.weixin.qq.com/s?__biz=Mzg3Mzc0NjUzMQ==&mid=2247497090&idx=1&sn=417f4d570deb4d116dabb9a473ebdf7a&source=41#wechat_redirect
单调栈 算法不懂看这个链接 https://mp.weixin.qq.com/s?__biz=Mzg3Mzc0NjUzMQ==&mid=2247497088&idx=1&sn=35e4f21d431d3c6ff91c2d6b62451339&source=41#wechat_redirect
滑动窗口 算法不懂看这个链接 https://www.cnblogs.com/huansky/p/13488234.html
双指针 算法不懂看这个链接 https://mp.weixin.qq.com/s?__biz=Mzg3Mzc0NjUzMQ==&mid=2247497066&idx=1&sn=1b62c9b5305576a06208b1a2202c9ea7&source=41#wechat_redirect
二分 https://leetcode.cn/leetbook/read/binary-search/x6q6fi/

BFS 算法不懂看这个链接 添加链接描述
DFS 算法不懂看这个链接 https://www.bilibili.com/video/BV1P5411N7Xc

设计题:
1845. 座位预约管理系统 https://leetcode.cn/problems/seat-reservation-manager/
1603. 设计停车系统 https://leetcode.cn/problems/design-parking-system/
1846. 简易银行系统 https://leetcode.cn/problems/simple-bank-system/
1797. 设计一个验证系统 https://leetcode.cn/problems/design-authentication-manager/
面试题 03.06. 动物收容所 https://leetcode.cn/problems/animal-shelter-lcci/
355. 设计推特 https://leetcode.cn/problems/design-twitter/
1396. 设计地铁系统 https://leetcode.cn/problems/design-underground-system/

字符串、排序
http://oj.rnd.huawei.com/problems/374/submissions
http://oj.rnd.huawei.com/problems/1904/details
https://leetcode-cn.com/problems/bianry-number-to-string-lcci/
https://leetcode-cn.com/problems/longest-palindromic-substring/
https://leetcode-cn.com/problems/restore-ip-addresses/
https://leetcode-cn.com/problems/basic-calculator-ii/

链表、队列、哈希
http://oj.rnd.huawei.com/problems/395/details
http://oj.rnd.huawei.com/problems/282/details
https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/
https://leetcode-cn.com/problems/top-k-frequent-words/
https://leetcode-cn.com/problems/find-the-most-competitive-subsequence/
https://leetcode-cn.com/problems/swapping-nodes-in-a-linked-list/

栈、单调栈:
https://leetcode-cn.com/problems/decode-string/
https://leetcode-cn.com/problems/daily-temperatures/solution/
https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters/
https://leetcode-cn.com/problems/number-of-islands/
https://leetcode-cn.com/problems/redundant-connection/
https://leetcode-cn.com/problems/minimum-size-subarray-sum/

递归
https://leetcode-cn.com/problems/swap-nodes-in-pairs/
https://leetcode-cn.com/problems/binary-tree-preorder-traversal/
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
https://leetcode-cn.com/problems/longest-substring-with-at-least-k-repeating-characters/
https://leetcode-cn.com/problems/partition-to-k-equal-sum-subsets/

树、二叉树
https://leetcode-cn.com/problems/maximum-width-of-binary-tree/
https://leetcode-cn.com/problems/reorder-routes-to-make-all-paths-lead-to-the-city-zero/
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
https://leetcode-cn.com/problems/maximum-difference-between-node-and-ancestor/
https://oj.rnd.huawei.com/problems/326/details
https://oj.rnd.huawei.com/problems/216/details

BFS、DFS:
https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/solution/
https://leetcode-cn.com/problems/course-schedule/solution/
https://leetcode-cn.com/problems/perfect-squares/
https://leetcode-cn.com/problems/course-schedule/
https://oj.rnd.huawei.com/problems/387/details
https://oj.rnd.huawei.com/problems/1905/details

贪心和动态规划:
https://oj.rnd.huawei.com/problems/290/details
https://leetcode-cn.com/problems/task-scheduler/
https://leetcode-cn.com/problems/house-robber/
https://leetcode-cn.com/problems/boats-to-save-people/
https://leetcode-cn.com/problems/house-robber-iii/
http://oj.rnd.huawei.com/problems/221/details


2、
leetcode插件设置:
CodeFileName:自动生成类的类名。

P$!{question.frontendQuestionId}_$!velocityTool.camelCaseName(${question.titleSlug})
${question.content}
package leetcode.editor.cn;

/**
 * ${question.title}
 * @date $!velocityTool.date()
 */
public class P${question.frontendQuestionId}_$!velocityTool.camelCaseName(${question.titleSlug}){
	 public static void main(String[] args) {
	 	 Solution solution = new P$!{question.frontendQuestionId}_$!velocityTool.camelCaseName(${question.titleSlug})().new Solution();
	 }

${question.code}
}

在这里插入图片描述

${question.title}	题目标题	示例:两数之和
${question.titleSlug}	题目标记	示例:two-sum
${question.frontendQuestionId}	题目编号
${question.content}	题目描述
${question.code}	题目代码
$!velocityTool.camelCaseName(str)	转换字符为大驼峰样式(开头字母大写)
$!velocityTool.smallCamelCaseName(str)	转换字符为小驼峰样式(开头字母小写)
$!velocityTool.snakeCaseName(str)	转换字符为蛇形样式
$!velocityTool.leftPadZeros(str,n)	在字符串的左边填充0,使字符串的长度至少为n
$!velocityTool.date()	获取当前时间

3、
刷题刷题刷题。。。。目前在按Tag刷题,希望总结出套路和框架,在这里做一个整理。

二分查找 Binary Search
特征:有序数组查找元素,要求时间复杂度O(logN)。
注意mid取值,向下取整 mid = (left + right) / 2 保证定位到左侧元素,向上取整 mid = (left + mid + 1) / 2定位右侧元素,防止左边界分支不变。
35. 搜索插入位置

  1. 在排序数组中查找元素的第一个和最后一个位置

  2. 寻找两个正序数组的中位数

回溯法 Backtracking
题目特征:遍历,找出所有可能的组合;分步,每一步有不同选择。
回溯意义:对所有节点进行尝试,添加当前节点到路径中,当前节点处理完成后,删除当前节点,返回上一步状态。
深度优先遍历(Depth-First-Search,DFS):尽可能深地搜索,遍历。
方法要点:结束条件、遍历、剪枝、选择路径、递归、删除路径。
练手题目:
46. 全排列

  1. 组合总和

  2. 复原 IP 地址

  3. 组合总和 II

哈希表 Hash Table
特征:搜索
41. 缺失的第一个正数


4、
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中心主题
递归
题目
509. 斐波那契数
剑指 Offer 10- II. 青蛙跳台阶问题
70. 爬楼梯
时间复杂度: O(2^n),存在重复计算,需要缓存结果
HashMap<Integer, Integer> map = new HashMap<>();
if (map.containsKey(n))
map.get(n);
226. 翻转二叉树
112. 路径总和
特判
面试题 08.06. 汉诺塔问题
构造递归函数
注意移动盘个数
细胞分裂
注意题述,多个状态互相调用
public static int cellSparete(int n) {
return cellA(n) + cellB(n) + cellC(n);
}

public static int cellA(int n) {
    // 停止条件
    if (n == 0 || n == 1) {
        return 1;
    }
    // 递归
    return cellA(n - 1) + cellB(n - 1) + cellC(n - 1);
}

public static int cellB(int n) {
    // 注意b状态的停止条件最早为第1h
    if (n == 1) {
        return 1;
    }
    return cellA(n - 1);
}

public static int cellC(int n) {
    if (n == 0 || n == 1) {
        return 0;
    }
    if (n == 2) {
        return 1;
    }
    return cellB(n - 1);
}
		练习
			21. 合并两个有序链表
			24. 两两交换链表中的节点
				ListNode.next
			437. 路径总和 III
	规律
		问题可以分解成相同解决思路的子问题
		可以调用同一个函数求解
		分析问题从上到下,求解问题自下而上
	解法
		1、明确函数功能
			根据输入输出写出函数作用
		2、确定结束条件
			问题不能继续分解,返回最小求解结果
		3、找递推公式
			找到每次迭代求解相同的部分,并分为固定几步
		4、判断复杂度
			时间复杂度或为指数级,需要优化重复计算,缓存重复结果
二分法
	https://leetcode-cn.com/leetbook/read/binary-search/xe9cog/
	模板1
		69. x 的平方根
			int相加防溢出: int mid = low + (high - low) / 2;
			int相乘转为long防溢出:(long)mid * mid  < x
				注意括号是小写long
		子主题
滑动窗口
	easy
		187. 重复的DNA序列
			HashMap
				子主题
		209. 长度最小的子数组
	子主题
		3.无重复字符的最长子串
		76.最小覆盖子串
		438.找到字符串中所有字母异位词
		567.字符串的排列
设计
	1396. 设计地铁系统
	1797. 设计一个验证系统
	1845. 座位预约管理系统
		PriorityQueue
其他
	辅助栈解法
		394. 字符串解码
			StringBuilder
				sb.toString()
			multi = multi * 10 + Integer.parseInt(c + "");
				multi = multi * 10 + c - '0';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值