![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣_模板-解题技巧-思路
文章平均质量分 61
安娜和她的笔记本
攀一座山,追一个梦
展开
-
时间复杂度分析
算法复杂度主要从时间、空间两个角度评价: 时间:假设运行时间固定,统计算法运行的「计算操作的数量」,以代表算法运行所需时间; 空间:统计在最差情况下,算法运行所需使用的「最大空间」 常见种类 根据从小到大排列,常见算法 时间 复杂度主要有: O(1) < O(logN) < O(N) < O(NlogN) < O(N2) < O(2N) < O(N!) O(1): 1)运行次数与N大小呈常数关系: int algorithm(int N) { int a =原创 2022-04-26 09:11:23 · 1375 阅读 · 0 评论 -
滑动窗口 [01]
先给出滑动窗口算法框架: /*滑动窗口算法框架*/ private static void minWindow(String s,String t){ //滑动窗口左右侧位置指针 int left = 0,right = 0; while (right < s.length()){ //滑动窗口右边增加 right ++; if(滑动窗口满足目标){ //对窗口内元素操作 } //滑动窗口左边缩小 while(滑动窗口缩小条件){ // left原创 2022-03-29 18:13:36 · 542 阅读 · 0 评论 -
BFS和DFS
深度优先遍历(简称 DFS )与广度优先遍历(简称 BFS )是图论中两种非常重要的算法。 DFS算法: 思想:一直往深处走,直到找到解或者走不下去为止。 void dfs(...) { // 结束递归的条件 if (...) { ... // 把“当前结果” 加入 “结果集容器” 中 return; } // 继续递归,里面可能有回溯,也可能没有 if (...) { ... // 在容器中保存当前数据原创 2022-03-28 16:40:41 · 632 阅读 · 0 评论 -
二分查找[01]
35.搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums = [1,3,5,6], target = 5 输出: 2 示例2: 输入: nums = [1,3,5,6], target = 2 输出: 1 示例 3: 输入: nums = [1,3,5,6], target = 7 输出: 4 提示: 1 <= nums.l原创 2022-03-24 19:47:43 · 282 阅读 · 0 评论 -
链表[01]
链表基本概念: 什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链接的入口节点称为链表的头结点也就是head。 手写链表(C/C++的定义链表节点方式): // 单链表 struct ListNode { int val; // 节点上存储的元素 ListNode *next; // 指向下一个节点的指针 ListNode(int x) : val(原创 2022-03-24 09:04:59 · 1566 阅读 · 0 评论 -
二叉树[1]
在二叉树上进行 DFS遍历和 BFS遍历的代码比较 DFS遍历使用递归: void dfs(TreeNode root) { if (root == null) { return; } dfs(root.left); dfs(root.right); } BFS 遍历使用队列数据结构: void bfs(TreeNode root) { Queue<TreeNode> queue = new ArrayDeque<>();原创 2022-03-20 15:15:57 · 550 阅读 · 0 评论