leetcode101刷题
文章平均质量分 89
Sheldon0105
这个作者很懒,什么都没留下…
展开
-
第14章—指针三剑客之二:树
14.1 数据结构的介绍作为(单)链表的升级版,我们通常接触的树都是二叉树(binary tree),即每个节点最多有两个子节点;树与链表的主要差别就是多了一个子节点的指针。14.2 树的递归树递归的写法与深度优先搜索的递归写法相同题目代号: 104 二叉树的最大深度题目描述:求一个二叉树的最大深度。测试用例:output:3我的分析:看左递归和右递归的最大值+1即可代码:public int maxDepth(TreeNode root) { if(root ==原创 2021-07-09 11:34:02 · 128 阅读 · 0 评论 -
第13章—指针三剑客之一:链表
13.1 数据结构的介绍链表是由节点和指针构成的数据结构,每个节点存有一个值,和一个指向下一个节点的指针,因此很多链表问题可以用递归来处理。不同于数组,链表并不能直接获取任意节点的值,必须要通过指针找到该节点后才能获取其值。同理,在未遍历到链表结尾时,我们也无法知道链表的长度,除非依赖其他数据结构储存长度。由于在进行链表操作时,尤其是删除节点时,经常会因为对当前节点进行操作而导致内存或指针出现问题。有两个小技巧可以解决这个问题:**一是尽量处理当前节点的下一个节点而非当前节点本身,二是建立一个虚拟节点原创 2021-07-09 10:56:33 · 138 阅读 · 4 评论 -
第12章—令人头大的字符串
12.1 字符串比较题目代号: 242 有效的字母异位词题目描述:判断两个字符串包含的字符是否完全相同测试用例:Input: s = “anagram”, t = “nagaram”Output: true我的分析:咱们搞一个数组或者hashmap来统计每一个字母出现的次数数组有个好处是直接就是26位的数组,这样数组每一位就应该对应一个字母出现的次数s这个字符串的字母统计去加个数t这个字符串的字母统计去减个数按道理来说,最后结果26个位置都应该是0,一旦某个位置不是0,那就代表肯定不原创 2021-07-08 16:53:59 · 149 阅读 · 2 评论 -
第11章—妙用数据结构
数组、栈、队列、hash表、集合11.1 数组题目代号: 448 数组中小事的数字题目描述:给定一个长度为 n 的数组,其中包含范围为 1 到 n 的整数,有些整数重复了多次,有些整数没有出现,求 1 到 n 中没有出现过的整数。测试用例:Input: [4,3,2,7,8,2,3,1]Output: [5,6]我的分析:我们遍历一遍数组nums,这样谁出现了,新数组中对应下标的位置+1;这样的话没有出现大的位置就一直是0第二次遍历,看位置是0的位置,就代表数字没出现代码:publ原创 2021-07-06 10:09:03 · 150 阅读 · 0 评论 -
第9章—巧解数学问题
9.1 公倍数和公因数例: 求567与405的最大公因数: 567 / 405 = 1 (余162) 405 / 162 = 2(余81) 162 / 81 = 2(余0) 即最大公因数是81,就是最终除尽的那个数//欧几里得算法(辗转相除): public static int gcd(int m,int n) {原创 2021-07-02 10:00:32 · 216 阅读 · 2 评论 -
第8章—化繁为简的分治法
8.1 算法描述三步走:1、“分”即为把大数组平均分成两个小数组;2、通过递归实现,最终我们会得到多个长度为 1 的子数组;3、“治”即为把已经排好序的两个小数组合成为一个排好序的大数组,从长度为 1 的子数组开始,最终合成一个大数组。8.2 表达式问题题目代号: 241 为运算表达式设计优先级题目描述:给定一个只包含加、减和乘法的数学表达式,求通过加括号可以得到多少种不同的结果测试用例:Input: “2-1-1”Output: [0, 2]在这个样例中,有两种加括号结果:((2-原创 2021-07-01 20:26:40 · 127 阅读 · 1 评论 -
第7章-深入浅出的动态规划
7.1 算法解释动态规划就是把一个复杂的问题划分成若干个子问题,依次划分,一层一层求解7.2 基本动态规划题目代号: 70 爬楼梯题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。测试用例:就两种情况最后一步走1个台阶 f(n-1)最后一步走2个台阶 f(n-2)所以 f(n) = f(n-1) + f(n-2)我的分析:最后迈一步有两种情况,看是迈1个台阶,还是迈2个台阶了原创 2021-06-24 21:34:26 · 315 阅读 · 1 评论 -
第6章—一切皆可搜索
6.1 算法解释深度优先搜索和广度优先搜索是两种最常见的优先搜索方法,它们被广泛地运用在图和树等结构中进行搜索。6.2 深度优先搜索主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。树是图的一种特例(连通无环的图就是树),接下来我们来看看树用深度优先遍历该怎么遍历。所以说深度优先遍历里面要用到栈,为什么呢原创 2021-06-11 16:42:53 · 117 阅读 · 1 评论 -
第5章—千奇百怪的排序算法
5.1 常用的排序算法可以用Array.sort()直接排序,也可写排序算法1、冒泡排序从左向右去遍历,依次去比较相邻的值,发现逆序则交换,使较大值依次往后移动,第一次找到最大值,第二次找到第二大值。。。public static void bubbleSort(int[] arr) { int temp = 0; // 临时变量 boolean flag = false; // 标识变量, 表示是否进行过交换 for (int i = 0; i < arr.length - 1; i原创 2021-03-09 21:14:29 · 137 阅读 · 0 评论 -
第4章—二分查找
4.1 算法解释二分查找又称折半查找,每次取区间的二分之一继续查找4.2 求开方题目代号: 69 x的平方根题目描述:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。测试用例:示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。我的分析:折半查找,一旦mid² <=x;来右边找原创 2021-03-08 10:31:07 · 605 阅读 · 0 评论 -
第3章—玩转双指针
3.1 算法解释双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务两个指针指向同一个数组,若行进方向相同,则为滑动窗口(两个指针相差的区域就是窗口)两个指针指向同一个数组,若行进方向相反,则可用来搜索,待搜索的数组一般是排序好的3.2 两个数的问题题目代号: 167 两数之和 II - 输入有序数组(易)题目描述:给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这原创 2021-03-06 23:09:45 · 298 阅读 · 0 评论 -
第2章—最易懂的贪心算法
2.1 算法解释贪心算法:就是很贪心的意思,它希望每一步都是最优的,从而使最后达到的结果是全局最优的2.2 分配问题题目代号: 455.分发饼干(易)题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量原创 2021-03-04 23:02:55 · 322 阅读 · 2 评论