
算法
InAHurryv
或取诸怀抱悟言一室之内
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基数排序 -java高雅写法
public void radixSort(int[] nums){ int n = nums.length; int max = Arrays.stream(nums).max().getAsInt(); System.out.println(max); int base = 1; int[] bucket = new int[10]; int[] mem = new int[n]; while原创 2021-02-14 02:56:46 · 104 阅读 · 0 评论 -
限流及其算法
限流就是在高访问量的情况下对于可能拖死系统的访问做拒绝处理或者部分拒绝处理滑动窗口import java.util.Iterator;import java.util.concurrent.ConcurrentLinkedQueue;public class TimeWindow { //通过计数器 会有双倍"限制"流量的问题 在timeout 时间内 可能最后一点时间 涌入limit 次调用 在下一个timeout开始时间 涌入limit 流量 显然不符合预期 privat原创 2021-02-10 22:29:17 · 124 阅读 · 0 评论 -
图之从dijkstra到 bellman ford 到 floyd
我们或许对队列、栈、数组等数据结构比较熟悉,但是如何对图的数据结构用计算机语言表示呢?邻接矩阵用一个二维矩阵来adj[i][j]来表示顶点i与j是否有连接关系,而二维表则用一个数组来放所有的顶点,关于边的表示则用一个单链表来表示。具体定义可如下class Graph{ private static final int max_num = 10000; VNode[] vertices = new VNode[max_num]; int vexNum=0,edgeNum = 0;}class V原创 2020-12-07 01:00:55 · 154 阅读 · 0 评论 -
单链表我懂了吗
单链表求中点结点。思路快慢指针public ListNode getMid(ListNode left,ListNode right){ ListNode slow = left; listNode fast= left; while(fast != right && fast.next != right){ fast = fast.next; fast = fast.next; slow = slow.next; } return slow;}判断单链表中.原创 2020-08-18 12:28:23 · 127 阅读 · 0 评论 -
Morris O(1)空间复杂度遍历二叉树
后来希望代码如诗 中序遍历 public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new LinkedList<>(); TreeNode cur = root; while(cur != null){ if(cur.left != null){ TreeNod.原创 2020-08-09 14:15:54 · 182 阅读 · 0 评论 -
课程表II
class Solution { int[] visted = null; boolean isValid = true; LinkedList<Integer> res = new LinkedList<>(); public int[] findOrder(int numCourses, int[][] prerequisites) { List<List<Integer>> edges = new Arr.原创 2020-08-05 16:48:39 · 121 阅读 · 0 评论 -
雷军:我没有写过诗,但有人说我的代码像诗一样优雅 暨大数相加
public String addStrings(String num1, String num2) { int i = num1.length() - 1; int j = num2.length() - 1; int need = 0;//保存进位 StringBuilder sb = new StringBuilder(); while(i >= 0 || j >= 0 || need != 0){ ...原创 2020-08-04 10:39:17 · 431 阅读 · 0 评论 -
向上取整 我懂了吗
之前俺向上取整用了 Math.ceil(Double.valueOf(1)/3) 那是相当的耗时现在俺使用 x/n-> (x+n-1)/n 那是相当快原创 2020-07-28 15:29:45 · 130 阅读 · 0 评论 -
滑动窗口 我懂了吗
本题暴力法 对每个子串验证是否包含了T中所有字符,但是时间复杂度O(n^2)或者可以使用 动态规划 令dp[i][j] 表示以S[i]结尾的S子串 包含T中前j个字符 的最小长度 然后写状态转移方程。在这里我介绍滑动窗口的方法 时间复杂度O(n) 滑动窗口用于解决数组或者字符串的子元素问题,可以将嵌套的for 转变为单层。 public String minWindow(String s, String t) { boolean isAnswer = false; .原创 2020-07-17 20:58:20 · 179 阅读 · 1 评论 -
leetcode 1028从先序遍历还原二叉树 迭代写法
//利用栈来保存结点, 新遍历到的结点肯定是某一子节点(根结点除外),由于是先序遍历 //那么可能是上一个遍历结点的左孩子,要么是之前的已经遍历的右孩子 LinkedList<TreeNode> stack = new LinkedList<>(); int pos = 0; while(pos<S.length()){ //首先拿到深度信息 int depth = 0; while(pos...原创 2020-06-19 13:11:55 · 175 阅读 · 0 评论 -
回溯我懂了吗
溯算法框架。解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。backtrack(已经选择的路径x,可选列表y){ if(满足结束条件){ res.add(); return; } for(type ele: 可选列表y){ x.push(ele)//做选择 backtrack(x,y');//递归 .原创 2020-06-10 01:24:49 · 161 阅读 · 0 评论 -
单调栈的应用
接雨水 leetcode 42给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/trapping-rain-water著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 privat.原创 2020-05-31 15:14:34 · 159 阅读 · 0 评论 -
由leetcode 437 路径综合III 所想到的
由leetcode 437 路径综合III 所想到的给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum-iii著作权归领扣网络所有。商业转载请联系官方授.原创 2020-05-29 01:45:33 · 149 阅读 · 0 评论 -
二叉树的非递归遍历自己理解版本
**二叉树的非递归遍历**中序:中序遍历是先左孩子 后跟 最后右孩子的顺序。所以应该先一个while循环把所有的根及其左孩子依次入栈,然后一个while循环 将栈顶元素取出,遍历,如果有右孩子,同样需要将其及其左孩子入栈。代码如下 TreeNode tem = root; LinkedList<TreeNode> stack = new LinkedList<>(); while(tem != null){ stack.push(tem原创 2020-05-14 02:20:22 · 202 阅读 · 0 评论 -
leetcode 下一个排列
//第一次解法错误正在重写原创 2019-10-24 17:13:45 · 133 阅读 · 0 评论 -
生成全排列
如何使用序数法来生成全排列思考了一上午的伪代码最后写出来的,不理解可以与我讨论!代码片段可以直接运行public void GenReverseOrder(int n){ int[] rvs_num = new int[n]; int[] perm = new int[n+1]; int[] kong = new int[n+1]; ...原创 2019-10-20 17:22:02 · 580 阅读 · 0 评论 -
非迭代递归树
class Solution {public: vector<int> postorderTraversal(TreeNode* root) { vector<int> res; stack<TreeNode*> stack; TreeNode * r = NULL;//记录最近访问过的节点初始值设为NU...原创 2019-08-31 21:49:39 · 194 阅读 · 0 评论 -
Leetcode 1
题目:Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.//递归public class Solution { publ...原创 2019-01-03 21:47:29 · 171 阅读 · 0 评论 -
最长递减子序列 最简单描述
package someLearn;//写快排的时候犯了个愚蠢的错误 就是 让交换值通过一个函数 来交换,只是Exchange(int i,int j);这种错误还是不犯为好。其实可以写为exchange(int[]A,int i,int j);//问题描述:如何求出一个数列的最长递减子数列的长度 比如输入含有 5 4 3 7 的数组 输出3 这里用动态规划 // F(a[i]) = max原创 2017-05-24 00:42:05 · 1099 阅读 · 0 评论 -
堆排序算法分析 和代码实现
package algorithm;public class Heap { //堆的性质 //(1)一个含有n个元素的堆,高度floor(lgn). //(2)对于任何一个含有n 元素的堆中,至多有celling(n/(2^(h+1)))个高度为h的节点(可用数学归纳法) //堆排序 需要注意的点 //(1)通过 max_heapify中heapSi原创 2017-05-17 00:18:47 · 491 阅读 · 0 评论 -
动态规划 钢条切割问题
package someLearn; //钢条切割问题 public class CutRod { public static int cr(int[] p,int n){ if(n==0){ return 0; } int max=-10000; for(int i=1;i<=n;i原创 2017-05-18 16:48:43 · 285 阅读 · 0 评论 -
最长公共子序列 java 代码实现
package someLearn;//最长公共子序列 就当是收藏一下代码 也没什么好讲的 主要就是关于数组大小的问题应该定义为c[m+1][n+1] z这样就可以用c[m][n] 来表示长度为m n的最长公共子序列public class Lcs { public static int lcs(String str1,String str2){ int m=str1.原创 2017-05-21 15:53:20 · 486 阅读 · 0 评论 -
链表翻转 快速排序
5、 链表翻转<1>迭代方式Prev = head;Curr = head;If(head==null||head.getNext()==null){ return head}Node tem;//用来存储curr.getNext()指针while(curr.getNext()!= null){ tmp = curr.getNext();curr.g原创 2017-11-22 11:01:55 · 269 阅读 · 0 评论 -
二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树
package binRela;import java.util.Arrays;/** * @Author GJL * @Desription * @Date 2017/11/23 * @Modified By: **/public class FindAcurateTree { public static BinaryNode rebuildBinaryTree(int[] pr原创 2017-11-23 16:24:02 · 269 阅读 · 0 评论 -
堆排序 Java
堆排序主要是理解其基本思想:主要十三个函数的书写 堆化函数 建造最大堆 以及排序函数堆化主要是对某一个节点调整其左右节点的顺序 根据其大小,但是调整后的节点可能会不符合大顶的特性,所以会继续对与跟节点调换的节点实行同样的规则,(可以递归 可以迭代)。建造最大堆 是利用堆化函数 从最后一个非叶子节点开始 ,堆化,等遍历到 0 时此时,已经建造成为最大堆。 排序时候 就可以 把最后的元素 与 堆定的原创 2017-11-24 16:30:57 · 145 阅读 · 0 评论 -
prim 算法 最小生成 树
public void prim(Graph1 graph1){ int k ; int j; //初始化 lowCost[0] = 0; adjVtex[0] = 0; //初始化 以节点 0 为 初始 节点 初始化lowCost[] for(int i = 1;i<graph1.cu原创 2017-11-26 22:55:28 · 249 阅读 · 0 评论 -
括号匹配
#define Max 50#define ElementType chartypedef struct{ ElementType data[Max]; int top;}*SqStack;void InitialSqStack1(SqStack s);int push(SqStack s,ElementType e);int pop(SqStack s,ElementType* ...原创 2018-10-23 16:40:51 · 176 阅读 · 0 评论 -
平衡二叉树
//今天2018壬戌月 戊子日 晴转多云 心情无明显起伏 .对于二叉排序树的缺点我们应该知道就是当某些节点的插入会使得树的左右子树高度相差过大,即整体树高变高,查找性能变低那么如何优化,AVL树(源于发明者的名字)。之前对于其左旋右旋一知半解,现在想记录一下自己现在的想法:首先应该明白左旋右旋的基本操作。左旋:旋转节点的右子树不变,左子树变为根节点的右子树。右旋:旋转节点的左子树不变,右子...原创 2018-10-23 23:18:32 · 166 阅读 · 0 评论