算法
文章平均质量分 54
herokang
会飞的猿
展开
-
面试常见算法汇总-链表
一、链表中的加法题1、逆序两数相加,如 1->2->3 1->2->3 321+321=642 输出链表2->4->6public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = new ListNode(0); ListNode node = head; //商 int div = 0;原创 2021-02-10 01:12:26 · 1004 阅读 · 0 评论 -
二叉树最大深度
求二叉树的最大深度递归实现public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { int leftHeight = maxDepth(root.left); int rightHeight = maxDepth(root.right); return Math.max(leftHei原创 2021-01-17 16:41:22 · 930 阅读 · 0 评论 -
二叉树层序遍历
例:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],返回其层序遍历结果:[[3],[9,20],[15,7]]一、广度优先bfs实现public List<List<Integer>> levelOrder2(TreeNode root) { List<List<Integer>> res = new ArrayList原创 2021-01-17 16:31:18 · 969 阅读 · 0 评论 -
回溯算法
一、子集问题(没有重复元素)给你一个整数数组 nums ,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。示例 :输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new ArrayList<&g原创 2021-01-17 00:34:42 · 852 阅读 · 0 评论 -
十大经典排序算法(动图演示)
一、冒泡排序冒泡排序原理:(以升序分析)循环取相邻的两个数,比较大小,其中较大的数放到右边第一次循环后最右边的数就是最大的数,之后以此类推,就像水中气泡往上冒一样,每次都把最大的数放到末尾。循环次数:6+5+4+3+2+1public static void main(String[] args) { int[] arr = new int[]{89, 32, 55, 543...转载 2020-02-20 12:38:03 · 242 阅读 · 0 评论 -
堆排序与其在topN案例的应用
一、堆排序概述作为选择排序的改进版,堆排序可以把每一趟元素的比较结果保存下来,以便我们在选择最小/大元素时对已经比较过的元素做出相应的调整。堆排序是一种树形选择排序,在排序过程中可以把元素看成是一颗完全二叉树,每个节点都大(小)于它的两个子节点,当每个节点都大于等于它的两个子节点时,就称为大顶堆,也叫堆有序; 当每个节点都小于等于它的两个子节点时,就称为小顶堆。算法思想(以大顶堆为例):...原创 2020-02-19 22:26:35 · 646 阅读 · 0 评论 -
一致性hash算法
先来解释一下概念:一致性Hash算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot Spot)问题,初衷和CARP十分相似。一致性Hash修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。一致性Hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1、平衡性(Ba...原创 2019-09-07 21:41:48 · 175 阅读 · 0 评论