leetcode刷题之路
文章平均质量分 63
俯仰天地
AI Compiler Leaner
展开
-
快速幂算法
快速幂算法 快速幂算法能帮我们算出指数非常大的幂,传统的求幂算法之所以时间复杂度非常高(为O(指数n)),就是因为当指数n非常大的时候,需要执行的循环操作次数也非常大。所以我们快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。让我们先来看一个简单的例子:3^10=3*3*3*3*3*3*3*3*3*3//尽量想办法把指数变小来,这里的指数为103^10=(3*3)*(3*3)*(转载 2021-11-14 09:31:07 · 154 阅读 · 0 评论 -
912. 排序数组(快速排序)
912. 排序数组(快速排序)给你一个整数数组 nums,请你将该数组升序排列。示例 1:输入:nums = [5,2,3,1]输出:[1,2,3,5]示例 2:输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5]这道题是LeetCode的912题,要求将一个数组排序,我们本文给出其快速排序的解法。这次直接先上代码:class Solution { Random random = new Random(); public int[] sor原创 2021-10-05 14:42:12 · 779 阅读 · 0 评论 -
145. 二叉树的后序遍历(迭代遍历)
145. 二叉树的后序遍历给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]对于后序遍历,由于遍历的顺序是左->右->中,所以某个节点在其左子树遍历完成后并不能立即出栈,而是要等待其右子树叶遍历完成后再出栈,那么我们如何知道当前这次出栈是因为左子树遍历完了还是右子树遍历完了呢?所以我们要借助一种新的数据结构来辅助记录该节点是第一次出栈还是第二次。如下 class Ta原创 2021-10-03 23:01:21 · 862 阅读 · 0 评论 -
94. 二叉树的中序遍历(迭代遍历)
94. 二叉树的中序遍历给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]思路和144 二叉树的前序遍历(迭代遍历)一致,但区别在于我们不是 遇见一个就将这个节点的值加入数组中,而是在这个节点出栈的时候,再将其节点加入数组。很容易想到:什么情况下节点会出栈?叶子节点a出栈:左节点为null,退回a,a出栈。非叶子节点b出栈:b的左子树已经遍历完成,退回b,然后继续遍历b的右子树。可以看到,某个节点出栈原创 2021-10-03 09:48:54 · 286 阅读 · 0 评论 -
144 二叉树的前序遍历(迭代遍历)
144 二叉树的前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]**进阶:**递归算法很简单,你可以通过迭代算法完成吗?递归算饭过于简单,不再赘述,我们直接看下迭代算法。初始状态将root节点入栈,然后now节点指向root节点的左子节点,发现为null。这个时候需要退回root节点(以下称1节点),但由于1节点我们已经遍历过了,所以直接可以进入1节点的右节点。(具有普适性,在前序遍历中我们当原创 2021-10-03 09:15:07 · 196 阅读 · 0 评论