
详解题目
文章平均质量分 78
小pig饲养员
为了独立游戏正在努力积攒经济基础的程序员。
展开
-
二叉树的三种遍历方式(递归+非递归)
总思路首先树的遍历一共有三种前序遍历顺序是 根结点 - 左子树 - 右子树后序遍历顺序是 左子树 - 右子树 - 根结点中序遍历顺序是 左子树 - 根结点 - 右子树并且对于每个结点都按照一样的顺序递归执行递归递归方式下,大家都很熟悉,无非就是函数体内根据遍历的顺序来调用。void preorder(TreeNode* root) { if(root == nullptr) { return; } ans.pu原创 2021-03-12 21:31:32 · 246 阅读 · 0 评论 -
剑指 Offer 53-I 在排序数组中查找数字C++
二分法太不熟悉了解法 二分法在本题的二分开始之前,先来看看二分的两种方法第一种 左闭右闭区间 [L , R]public int binarySearch(int arr[], int target){ if (arr!=null&&arr.length>0){ // 注意 l 与 r 的初值 int l=0,r=arr.length-1;//定义 在[l...r]的范围里寻找target,循环不变量,原创 2021-01-08 13:54:43 · 217 阅读 · 1 评论 -
原地交换法实现全排列
全排序题目属于深度优先最常用的题目之一,当时遇到的时候对它的递归理解不了。随着对递归的熟练度的增加,递归部分的理解比初次遇到快了很多。 swap(s[step],s[i]); dfs(s,step+1); swap(s[step],s[i]);记得当时的疑问很蠢:递归的过程中真的能保证s[step]和s[i]不会变化吗,如果变化了swap回来不会乱掉嘛…现在想想其实很好理解,因为递归每次调用都有这三行代码,因为最后一次递归的时.原创 2020-12-31 01:15:14 · 1052 阅读 · 1 评论 -
两种深度优先遍历-寻找路径
一种是K神的做法,由于大家都抄作业,啊哈算法形式的深度优先很难找到,这里记录一下class Solution {public: int rows; int cols; bool exist(vector<vector<char>>& board, string word) { if(word.empty() || board.empty()) return word.empty();//字符串为空返回正确,.原创 2020-12-17 18:55:25 · 802 阅读 · 0 评论 -
剑指offer 11-旋转数组的最小数字c++
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0解法 遍历一看到这个就想到找个断点,那就遍历就行了class Solution {public: int minArray(vector<int>&a原创 2020-11-16 20:54:09 · 118 阅读 · 0 评论 -
斐波那契数列-滚动数组算法探究
在学校的教材中学到的斐波那契数列的解法将数值存储在数组的两个元素之间,并且不断循环赋值class Solution {public: int fib(int n) { int f[2] = {1, 1}; if( n == 0) return 0; while(--n) { f[n&1] = (f[0] + f[1]) % 1000000007; cout<<f[1]<&l原创 2020-12-14 23:28:16 · 362 阅读 · 0 评论 -
前序遍历和中序遍历重建二叉树详细思路
二刷的时候感觉还是有点不太上手,记录一下思路顺便三刷。题目描述思路描述按照思考顺序1.前序遍历和中序遍历是如何决定二叉树的前序遍历->根节点-左子树-右子树中序遍历->左子树-根节点-右子树通过前序遍历的每个子树的起始节点可以得到它的根结点,在得到根结点之后带入中序遍历中可以分割出左子树和右子树。所以总结出思路1.先根据前序遍历的第一个结点值得到根结点,带入中序遍历数组;2.得到中序遍历的左子树长度之后,根据前序遍历的子树的第一个遍历点是根节点的特性就可以再次带入前序原创 2020-12-13 01:50:36 · 892 阅读 · 0 评论