![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
God_Mood
0x00: 勤学如春起之苗,不见其增,日有所长。
辍学如磨刀之石,不见其损,日有所亏。
0x01: 学习一种新技术最好且最快的方式就是
去官网看文档
展开
-
存在重复元素(I II III)小结
217. 存在重复元素给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true解法1:用Ha...原创 2019-10-13 16:55:50 · 361 阅读 · 0 评论 -
矩阵快速幂求N次方(Java版)
首先先写一个两个矩阵相乘的代码:注意边界限制。public static int[][] twoMatrixPlus(int x [][],int y [][]) {//两个矩阵相乘,具有普适性 int ans[][]=new int[x.length][y[0].length]; for(int i=0;i<ans.length;i++) for(int j=0;j...原创 2018-11-28 17:26:24 · 3162 阅读 · 0 评论 -
序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树思路是看大佬们的文章学到的,然后整理思路自己敲一遍。无论采用何种遍历方式序列化二叉树,反序列化时采用相同的方式即可,不过先序遍历的方式来反序列化比较简单。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = nu...原创 2019-01-31 18:15:22 · 105 阅读 · 0 评论 -
二叉搜索树第K小节点
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { priva...原创 2019-01-31 19:48:21 · 185 阅读 · 0 评论 -
滑动窗口的最大值(Java版)
此处用到的数据结构是双端队列(详见百度)双端队列里面存放的是数组中的下标,er而不是数组中元素的值。import java.util.*;public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size) { ArrayList<Int...原创 2019-02-01 19:50:37 · 417 阅读 · 0 评论 -
208. Implement Trie (Prefix Tree)
题目链接:https://leetcode.com/problems/implement-trie-prefix-tree/实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返...原创 2019-06-13 14:26:36 · 268 阅读 · 0 评论 -
210. Course Schedule II( 课程表 II)
题目链接:https://leetcode.com/problems/course-schedule-ii/现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你...原创 2019-07-01 22:47:59 · 151 阅读 · 0 评论 -
211. Add and Search Word - Data structure design
题目链接:https://leetcode.com/problems/add-and-search-word-data-structure-design/设计一个支持以下两种操作的数据结构:void addWord(word)bool search(word)search(word)可以搜索文字或正则表达式字符串,字符串只包含字母.或a-z。. 可以表示任何一个字母。示...原创 2019-06-26 19:58:42 · 125 阅读 · 0 评论 -
212. Word Search II(单词搜索II)
题目链接:https://leetcode.com/problems/word-search-ii/给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入:wo...原创 2019-07-02 09:13:23 · 162 阅读 · 0 评论 -
KMP算法求next数组
在KMP算法中有个数组,叫做前缀数组,也有的叫next数组,每一个子串有一个固定的next数组,它记录着字符串匹配过程中失配情况下可以向前多跳几个字符,当然它描述的也是子串的对称程度,程度越高,值越大,当然之前可能出现再匹配的机会就更大。这个next数组的求法是KMP算法的关键,但不是很好理解,我在这里用通俗的话解释一下,看到别的地方到处是数学公式推导,看得都蛋疼,这个篇文章仅贡献给不喜欢看数...原创 2019-08-27 21:56:42 · 659 阅读 · 0 评论 -
并查集的实现(Java)
什么是并查集我们设计了一份API来封装所需的基本操作:初始化、连接两个节点、判断包含某个节点的分量、判断两个节点是否存在于同一个分量之中以及返回所有分量的数量。public class UnionFindSetUnionFindSet(int n) initialize N sites with ...原创 2018-12-01 17:42:46 · 1068 阅读 · 0 评论 -
Java实现快速幂
顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。实现如下:public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(fastPower(5,2,10000007)); } ...原创 2018-11-28 13:05:12 · 295 阅读 · 0 评论 -
bitmap算法代码实现
以2的8次方数据量为例,先写一个小的演示版本,数据成功后再加大数据量。此代码加大数据量后适合测试在40亿个整数数据中判断某个整数是否存在。测试代码如下:package jianzhioffer;public class bitmap { public static void main(String[] args) { // TODO Auto-generated meth...原创 2018-10-18 18:15:35 · 299 阅读 · 0 评论 -
数组离散化(Java版)(数组中元素可重复)
本来是想用树状数组求逆序数的,结果在数组离散化时卡了好久,蓝瘦。。。于是乎实现了一个Java版的,加深印象。我的思路就是自己定义一个类保存当前的index和value,然后用Collection.sort()对它进行排序(只需重写一个方法即可)最后对重复的元素进行判断,相同的值在离散后也是相同的值。代码如下:class Node implements Comparable{...原创 2018-11-04 14:11:58 · 683 阅读 · 0 评论 -
两个链表的第一个公共节点(剑指Offer)
一 ,穷举肯定不行,复杂度太大二 ,容易想到的思路是通过将一个链表构造成环,然后转化为判断另一个单向链表与环相交的问题。三 ,在网上看到一种新奇的思路,由于M+N=N+M,所以转化为了这样: P1指向Phead1,P2指向Phead2,同时向后移动,当一个较短的链表遍历结束就指向到另一个链表表头, 同理对长链表指针,相当于两个链表指针都走过了M+N的长度,若有...原创 2018-11-22 11:27:28 · 95 阅读 · 0 评论 -
斐波那契数列优化
避免重复递归计算,优化算法如下:public class NFib { public static long F(int n) { if(n<=0) return 0; if(n==1||n==2) return 1; long f1=1,f2=1,temp = 0; for(int i=3;i<=n;i++) ...原创 2018-11-25 23:27:53 · 270 阅读 · 0 评论 -
求TopN个元素(堆实现)
具体思路见注释public class TopN { public static void main(String[] args) { // TODO Auto-generated method stub int[] array= {16,14,10,8,22,21,7,9,3,2,1,4,1}; HeapGetTopN(6,array); for(int i=0;i&...原创 2018-11-25 14:14:01 · 405 阅读 · 0 评论 -
乘积最大的拆分(可重复)
最好的情况是全拆分为3,否则剩余一个2或4也可以。public class DevideInt { public static int devidePlus(int n) { int ans=1; if(n%3==0) { int power=n/3; double d=Math.pow(3,power); ans=(int)d; }else if(n%3==...原创 2018-11-29 16:57:02 · 1297 阅读 · 0 评论 -
大数的阶乘溢出解决方案
求一个数的阶乘,利用数组存储解决溢出。(数组大小可调整)public class NFactorial { public static void getFactorial(int n) { int[] array=new int[40000]; int i,j,flag=0,carry=0; array[0]=1;//carry为进位标志,flag为数组中最高位标记 for...原创 2018-12-02 16:16:09 · 885 阅读 · 0 评论 -
乘积最大的拆分(不可重复)
思路就是:(1)尽量使得元素是连续的。(2)如果有多出来的,从后往前均匀分配到各个元素。考虑到一种特殊情况,当多出来的数比前面已有元素的个数大1时(比如8的情况),先给已有元素的最大元素加1,然后再均匀分配到每个元素。实现代码如下:public static long DevidePlus(int num) { int[] array= new int[100]; in...原创 2018-11-29 22:41:02 · 653 阅读 · 0 评论 -
计算n的阶乘有多少个尾随零
直接阶乘肯定会溢出,比较好的方法就是观察规律:我们会发现一个因子2和因子5组合产生一个0,这样我们只需统计1到n有多少个因子对,即n!的尾随零个数,因子2的个数比因子5的个数多,因此我们只需统计出因子5的个数即可。注意25,贡献两个5因子,125贡献三个,以此类推。实现代码如下:public class CountZero { public static int get...原创 2018-12-02 16:39:50 · 334 阅读 · 0 评论 -
B树的度数 阶数区别与联系
最近在复习数据结构的时候看到了B树的两种定义,一种是算法导论中的度数说;另一种是维基百科的阶数说。在此记录一下:度数:在树中,每个节点的子节点(子树)的个数就称为该节点的度(degree)。阶数:(Order)阶定义为一个节点的子节点数目的最大值。(自带最大值属性)然后再结合B树来理解具体含义:B树的具体性质这里就不在阐述了,说一下算法导论中与度数相关的: 每个...原创 2018-09-24 13:43:24 · 19316 阅读 · 2 评论