数据结构与算法
文章平均质量分 93
数据结构
Kaiz‘s Blog
这个作者很懒,什么都没留下…
展开
-
算法 - 十大经典排序算法简析
十大经典排序算法-简析1 冒泡排序(Bubble Sort)2 选择排序(Selection-Sort)3 插入排序(Insertion-Sort)4 希尔排序(Shell Sort)5 归并排序(Merge Sort)5.1 自顶向下归并排序5.2 自底向上归并排序6 快速排序(Quick Sort)7 堆排序(Heap Sort)7.1 堆(1)堆中插入元素(2)堆中删除元素7.2 堆排序(1)建堆(2)排序8 计数排序(Counting So.原创 2021-05-18 17:15:24 · 648 阅读 · 2 评论 -
算法 - 位运算
目录位运算基础位运算符概览基础应用实战演练只出现一次的数字 III比特位计数N皇后参考位运算基础位运算符概览符号描述运算规则&与两个位都为1时,结果才为1|或两个位都为0时,结果才为0~非~1 = 0 , ~0 = 1^异或两个位相同为0,相异为1<<左移各二进位全部左移若干位,高位丢弃,低位补0>>右移各二进位全部右移若干位,对无符号数,高位补0;有符号数,各编译器处理方法不一样,有的补符号位原创 2021-03-21 23:41:45 · 225 阅读 · 0 评论 -
算法 - 深度优先遍历与广度优先遍历
深度优先搜索基本概念经典举例括号生成单词搜索树的前序遍历广度优先搜索基本概念经典举例单词接龙树的层序遍历深度优先搜索基本概念深度优先搜索(Depth-First-Search,简称DFS)与是一种用于遍历或搜索树或图的算法,其执行过程类似于树的前序遍历。其思想是,从图中某个顶点v出发尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点.原创 2021-03-19 16:19:05 · 1066 阅读 · 0 评论 -
算法 - 贪心算法与动态规划
目录贪心算法基本概念经典举例教室调度跳跃游戏动态规划基本概念经典举例状态转移表状态转移方程高阶实战最长公共子序列莱文斯坦距离推荐阅读贪心算法基本概念贪心算法(Greedy)是在每一步选择中都采取在当前状态下最好或者最优(即最有利的)选择,从而希望导致结果是全局最好或最优的算法(实际上考虑的是局部最优解)。适用贪心算法的场景:局部最优策略能导致产生全局最优解。当问题能够分解成子问题解决,并且每个子问题的最优解能递推到最终问题的最优解(这种子问题最优解被称为最优子结构)。经典举例教室调度以《算法图原创 2021-03-14 21:22:05 · 343 阅读 · 0 评论 -
算法 - 分治与回溯
目录分治基本概念经典举例回溯基本概念经典举例参考分治基本概念分治算法(divide and conquer)和核心思想正如其字面含义,分而治之,就是把一个复杂问题分成两个或者更多的相同和相似的问题,直到最后问题可以简单的直接求解,原问题的解即是子问题解的合并。这个定义看起来类似递归的定义,区别在于分治算法是一种处理问题的思想,而递归是一种编程技巧。实际上,分治算法一般比较适合用递归来实现,当然也可以用迭代来实现,这也是区别之一。递归算法从本质上来就是分治算法,无非就是有些问题递归需要将原问题分解成多原创 2021-03-14 21:17:55 · 1155 阅读 · 0 评论 -
算法 - 递归与迭代 区别与联系
目录迭代递归基本概念应用场景尾递归递归与迭代区别递归与迭代的转换参考迭代迭代(iteration)是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。 每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。利用迭代算法解决问题,需要做好以下三个方面的工作:确定迭代变量建立迭代关系式对迭代过程进行控制以计算n的阶乘n!为例,先计算1乘2,然后得到结果再乘以3,在用得到结果乘以4…一直乘到n。用Java代码表示: public sta原创 2021-03-07 22:53:53 · 5435 阅读 · 0 评论 -
Leetcode 题解 - 栈和队列
文章目录1. 用栈实现队列2. 用队列实现栈3. 最小值栈4. 有效的括号5. 每日温度6. 下一个更大元素 II7. 柱状图中最大的矩形8. 接雨水1. 用栈实现队列232. Implement Queue using Stacks (Easy)Leetcode / 力扣栈的顺序为后进先出,而队列的顺序为先进先出。使用两个栈实现队列,一个元素需要经过两个栈才能出队列,在经过第一个栈时元素顺序被反转,经过第二个栈时再次被反转,此时就是先进先出顺序。public class MyQueue {原创 2021-02-24 21:01:27 · 208 阅读 · 0 评论 -
Leetcode 题解 - 链表
1. 找出两个链表的交点160. Intersection of Two Linked Lists (Easy)Leetcode / 力扣设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问 A 链表的指针访问到链表尾部时,令它从链表 B 的头部开始访问链表 B;同样地,当访问 B 链表的指针访问到链表尾部时,令它从链表 A 的头部开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。原创 2021-02-23 10:58:53 · 339 阅读 · 0 评论 -
Leetcode 题解 - 数组与矩阵
数组1. 移动零2. 最大连续 1 的个数3. 加一4. 删除排序数组中的重复项5. 合并两个有序数组6. 盛最多水的容器7. 旋转数组8. 三数之和9. 有效的数独矩阵1. 改变矩阵维度2. 有序矩阵查找3. 有序矩阵的 Kth Element4. 对角元素相等的矩阵数组1. 移动零283. Move Zeroes (Easy)Leetcode / 力扣For example, given nums = [0, 1, 0, 3, 12], after .原创 2021-02-21 18:06:22 · 469 阅读 · 0 评论 -
Leetcode 题解 - 哈希表
1. 数组中两个数的和为给定值2. 判断数组是否含有重复元素3. 最长和谐序列4. 最长连续序列5. TinyURL 的加密与解密6. 有效的字母异位词7. 字母异位词分组哈希表使用 O(N) 空间复杂度存储数据,并且以 O(1) 时间复杂度求解问题。Java 中的 HashSet 用于存储一个集合,可以查找元素是否在集合中。如果元素有穷,并且范围不大,那么可以用一个布尔数组来存储一个元素是否存在。例如对于只有小写字符的元素,就可以用一个长度为 26 的布尔数组来存储一个字符集.原创 2021-02-20 00:41:12 · 138 阅读 · 0 评论 -
三道题套路解决递归问题
文章来源:lyl’s blog递归解题三部曲何为递归?程序反复调用自身即是递归。我自己在刚开始解决递归问题的时候,总是会去纠结这一层函数做了什么,它调用自身后的下一层函数又做了什么…然后就会觉得实现一个递归解法十分复杂,根本就无从下手。相信很多初学者和我一样,这是一个思维误区,一定要走出来。既然递归是一个反复调用自身的过程,这就说明它每一级的功能都是一样的,因此我们只需要关注一级递归的解决过程即可。如上图所示,我们需要关心的主要是以下三点:整个递归的终止条件。一级递归需要做什么?应该.转载 2021-01-15 16:07:19 · 191 阅读 · 0 评论