算法
不会算法题无法做一名合格的业界人士~
重新做人!
非Fan的维森
爱好理财,爱好编程,更爱生活的程序员小明。
展开
-
数据结构学习之并查集
“并查集”是一种常见的数据结构,在互联网大厂的笔试题中也能看到它的身影。在刷LeetCode每日一题过程中,发现这种数据结构的妙处,参考LeetCode官方题解,写了这篇博文,供各位小伙伴们学习使用。并查集的相关知识并查集用于判断一对元素是否相连,它们的关系是动态添加的,这一类问题叫做【动态连通性】问题;支持【合并】与【查询是否在同一集合】的操作;底层结构为【数组】或者【哈希表】,用于表示【结点】指向【父结点】,初始化时指向自己;【合并】就是把一个集合的根结点指向另一个集合带的根结点,只要根结点原创 2020-06-08 10:29:02 · 180 阅读 · 0 评论 -
Java位运算的应用(异或运算)-求数组中唯一只出现一次的元素(LeetCode136)
在算法题中,异或运算是一种常用的位运算方法,本文将介绍利用异或运算来求数组中唯一只出现一次的元素。异或运算的三点重要性质如下:任何数与0的异或运算结果等于他本身,即a⊕0=a;任何数与其本身的运算结果等于0,即a⊕a=0;异或运算满足交换律和结合律,即a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例原创 2020-05-14 15:20:47 · 553 阅读 · 0 评论 -
二叉树的层序遍历(Java版)-LeetCode102题(每日一题)
二叉树的层序遍历本文更新一种二叉树的遍历方式(层序遍历),来自LeetCode102题,题目来源:LeetCode102题传送门其他二叉树遍历方法传送门如下:遍历二叉树(前序、中序和后续的递归和非递归遍历,绝对简单易懂!!!)二叉树的广度优先遍历和深度优先遍历(Java版)题目详情如下:package LeetCode102;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;原创 2020-05-13 10:24:46 · 192 阅读 · 0 评论 -
Java数组转为二叉树-由LeetCode236题(求二叉树的最近公共祖先)引出的问题拓展
直接上题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]下图是该数组转换成二叉树的形状来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lowest-原创 2020-05-10 17:31:04 · 184 阅读 · 0 评论 -
经典算法-求解最长回文子串问题(返回所有符合条件的子串集合)Java版题解
求解最长回文子串,有一个中心扩展算法思想。模版如下: /*算法思想很好理解,如果一个元素的左右两端也相等,那么就将左指针和右指针向两端移动一位,再来比较当前左右指针的元素是否还相等,如果还相等,则继续移动,否则跳出循环。最后返回能匹配到的回文字符串长度 */ private static int expandAroundCenter(String s, int left, int r...原创 2020-05-08 11:04:26 · 208 阅读 · 0 评论 -
Java版-经典算法“约瑟夫环问题”(企业高频笔试算法题)
经典算法-约瑟夫环问题(初级版)直接上经典的例题:案例1:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列(也类似于变态杀人狂问题)。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。求最后一个出列人的编号问题。常见的解法...原创 2020-05-08 09:30:42 · 386 阅读 · 0 评论 -
二叉树的广度优先遍历和深度优先遍历(Java版)
import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;import java.util.Stack;class TreeNode { int val; TreeNode left; TreeNode right; ...原创 2020-05-07 17:17:38 · 273 阅读 · 0 评论 -
在二分法查找中,求中位数的一些坑(左中位数和右中位数)
在二分法查找中,求中位数的一些坑(左中位数和右中位数)@TOC使用二分法查找时,我们经常会通过求中位数,来判断与目标值的大小关系。但是一定要注意!!!若在选择选择中位数时要进行取整迭代,就要选择合适的中位数求法,不能只简单的使用mid=(left+right)>>>1;,会导致出现死循环的情况。常见的有取左中位数和右中位数两种方法,代码如下://左中位数求法mid = ...原创 2020-05-03 11:56:35 · 1275 阅读 · 2 评论 -
遍历二叉树(前序、中序和后续的递归和非递归遍历,绝对简单易懂!!!)
最详细的二叉树遍历方法,包含递归和非递归遍历方法,适合小白入门!!!/** * 二叉树的前序、中序、后序遍历 * */import java.util.ArrayList;import java.util.List;import java.util.Stack;class TreeNode{ TreeNode left; TreeNode right; int val;...原创 2020-05-07 16:18:55 · 203 阅读 · 0 评论