leetcode
文章平均质量分 78
GoSantiago
这个作者很懒,什么都没留下…
展开
-
leetcode-子序列 子串
1. 求两个数组的最长公共子序列刻画最长公共子序列问题的最优子结构设X=x1x2…xm和Y=y1y2…yn是两个序列,Z=z1z2…zk是这两个序列的一个最长公共子序列。 如果xm=yn,那么zk=xm=yn,且Zk-1是Xm-1,Yn-1的一个最长公共子序列; 如果xm≠yn,那么zk≠xm,意味着Z是Xm-1,Y的一个最长公共子序列; 如果xm≠yn,那么zk≠yn,意味着Z是X,Yn-1的一个最长公共子序列。从上面三种情况可以看出,两个序列的LCS包含两个序列的前缀的原创 2021-10-20 23:40:47 · 325 阅读 · 0 评论 -
LeetCode-搜索
DFS1. 岛屿的最大面积岛屿的最大面积package dfs;import java.util.Arrays;public class Solution_island { public static int maxAreaOfIsland(int[][] grid) { if(null == grid || grid.length == 0 || (grid.length == 1 && grid[0].length == 0))原创 2021-10-20 23:32:50 · 191 阅读 · 0 评论 -
LeetCode-回溯
矩阵中的路径package huisu;public class Solution_01 { public static boolean hasPath(char[] matrix, int rows, int cols, char[] str) { if(rows == 0 || cols == 0) return false; char[][] matrix2 = new char[rows][cols]; int index =原创 2021-10-20 23:30:12 · 134 阅读 · 0 评论 -
剑指Offer中遇到的问题
总结第26、27、28、32-3、33、34、36题,不会做。好好看看39 40 42 45都不是很难,而且有一定的技巧。46题一时没有想起来好的解决办法。49也需要一定的技巧59-1好好做做03 数组中重复的数字class Solution { //遍历数组,使得下标i位置上的值num[i]==i public static int findRepeatNumber(int[] nums) { for(int i = 0; i < nums.length;原创 2021-07-12 22:55:23 · 228 阅读 · 1 评论 -
子串&子数组问题
1. 累加和等于num的最长子数组的长度(有负数)注:数组元素可为负数思路:求子数组问题,就是依次考虑数组中每一位元素之前的数组的情况。比如说arr = {7,3,2,1,1,7,7},依次考虑数组范围(0-i)中,任意元素开始,以arr[i]结尾的子数组是否符合条件。比如说i=0时,子数组{7}符合条件;i=4时,子数组{3,2,1,1}符合条件。假设遍历到i位置,数组元素从0加到i的值为sum,只需要求i之前的数组中,是否出现过和为sum-num的情况。例如,arr = {9,8,3,2,1,原创 2021-07-12 22:51:51 · 350 阅读 · 1 评论 -
编程常见问题
1. 二维数组初始化int[][] grid = { {1,2,3}, {2,0,4}, {3,1,1}};判断二维数组是否为空二维数组为空,要检查三个部分:一是数组首地址是否为空二是是否为{},也就是array.length==0的情况三是是否为{{}},这时array.length=1,但是array[0].length==0。所以判断语句为if(array==null||array.length==0||(array.length==原创 2021-07-12 22:47:09 · 661 阅读 · 0 评论 -
十进制转36进制
package test;import java.util.HashMap;import java.util.Stack;/** * 36进制与10进制转换思路: * 一、创建HashMap类型对象用于存放数字'0'到字母'Z'36个字符值键对 * 二、 * @author Administrator * */public class Ten2Sixty...原创 2020-04-06 13:48:41 · 853 阅读 · 0 评论 -
累加和等于num的最长子数组的长度
1. 累加和等于num的最长子数组的长度(有负数)注:数组元素可为负数思路:求子数组问题,就是依次考虑数组中每一位元素之前的数组的情况比如说arr = {7,3,2,1,1,7,7},依次考虑数组范围(0-i)中,任意元素开始,以arr[i]结尾的子数组是否符合条件。比如说i=0时,子数组{7}符合条件;i=4时,子数组{3,2,1,1}符合条件。假设遍历到i位置,数组元素从0加到i的值...原创 2020-03-23 20:55:50 · 394 阅读 · 0 评论 -
字符串中的表达式计算
字符串中的表达式计算思路:如果字符串中没有括号:每遇到一个字符,把它放进栈里(如果是数字字符,需要结合字符串将其转换成数字)。当一个数字进栈之前发现栈顶元素为*或/,则连续弹出两次栈顶,计算该表达式的结果,并把结果放入栈中。这样做保证栈中的元素只有数字、+、-,当字符串遍历完,计算栈中的表达式就行。如果字符串中有括号:设计一个函数int[] value(String str,...原创 2020-03-23 20:52:45 · 2436 阅读 · 0 评论 -
设计缓存结构
1. 设计缓存结构LRU注:哈希表中,key或value如果存的是简单类型(基本数据类型和String),则哈希表中存的是简单类型的值。如果要往哈希表中添加对象,存的是该对象的地址。思路:先设计一个节点Node<key, value>,(key,value的类型可以使用泛型)根据这个节点设计一个双向链表(由头到尾,优先级由低到高),里面存的是Node节点设计双向链表的几个方法:...原创 2020-03-23 20:51:23 · 554 阅读 · 0 评论 -
求最大子矩阵的大小(单调栈)
单调栈1. 单调栈的结构背景:给定一个数组,求数组中每一个元素的左边距离其最近的比它小的值,和右边距离其最近的比它小的值。数组:arr:{3,5,4,2,6}arr[i]leftright3null25344322nullnull62null思路:设计一个栈,依次存入的元素大于等于栈顶元素,保持栈中元素从下往上逐渐...原创 2020-03-23 20:45:15 · 734 阅读 · 0 评论 -
窗口
1. 生成窗口最大值数组题目:有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。例如,数组为【4,3,5,4,3,3,6,7】,窗口大小为3时:窗口数组 最大值[4 3 5] 4 3 3 6 7 max: 54 [3 5 4] 3 3 6 7 max: 54 3 [5 4 3] 3...原创 2020-03-23 20:41:59 · 222 阅读 · 0 评论 -
Morris遍历
Morris遍历Morris遍历是二叉树遍历的另一种方式,做到了空间复杂度为O(1),时间复杂度为O(N)。1. Morris遍历的流程当遍历指针cur遍历到某个节点:该节点有左孩子,则判断该节点左子树的最右孩子mostRight的right指针如果最右孩子的right指针为空,说明第一次遍历到该节点,即mostRight.right=null,则令最右孩子的right指针指向自己,...原创 2020-03-16 16:59:02 · 210 阅读 · 0 评论 -
有关窗口的算法题
1. 生成窗口最大值数组题目:有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。例如,数组为【4,3,5,4,3,3,6,7】,窗口大小为3时:窗口数组 最大值[4 3 5] 4 3 3 6 7 max: 54 [3 5 4] 3 3 6 7 max: 54 3 [5 4 3] 3...原创 2020-03-13 02:21:31 · 396 阅读 · 0 评论 -
Manacher
Manacher题目:求一个字符串中最长的回文串的长度。如果将字符串化成数组,每遍历一个元素,都要以其为中心判断回文串的长度,时间复杂度比较大。于是就有了Manacher算法,它和KMP算法一样,都是在暴力解的基础上进行改进。数据处理对于一个长度为奇数回文字符串,按照暴力法能够得出正确结果。但是对于长度为偶数的回文字符串,按暴力解法是不能得出正确结果的。因为长度为偶数的回文字符串的...原创 2020-03-12 13:42:34 · 166 阅读 · 0 评论 -
BFPRT
BFPRT题目:在一个无序数组中找到一个第K小的数一:背景介绍原文链接: https://segmentfault.com/a/1190000008322873在一堆数中求其前 k 大或前 k 小的问题,简称 TOP-K 问题。而目前解决 TOP-K 问题最有效的算法即是 BFPRT 算法,又称为中位数的中位数算法,该算法由 Blum、Floyd、Pratt、Rivest、Tarjan...原创 2020-03-12 02:08:28 · 266 阅读 · 0 评论 -
KMP
KMP算法1. KMP算法原理1.1 next[]给定一个数组arr,求它的next[]数组含义:next[i]表示数组arr第i个元素之前的字符串中,最长的公共前缀后缀的长度。注:next[0] = -1 next[1] = 0例子char[] arr = new char[]{'a', 'b', 'a', 'b', 'c', 'a', 'b', 'a', 'b', 'a',...原创 2020-03-09 20:28:46 · 222 阅读 · 0 评论 -
动态规划
动态规划1. 打印字符串的所有子序列如题,比如有字符串abc,则它的子序列有" ","a","b","c","ac","ab","bc","abc"public class Solution_PrintAllSub { public static void printAllSub(char[] str, int i, String res){ if(i == s...原创 2020-03-06 20:30:50 · 413 阅读 · 0 评论 -
贪心算法
贪心算法1. 拼接字符串使字典序最小比如:“ab”、“cd”、"ef"三个字符串,拼接的结果可以有多种,但是”abcdef“这个结果才是最小的。1.1 分析:按单个字符串的字典序进行比较:比如a小于b,则a放b前面这种思路是错误的:比如b和ba,字典序肯定是b小,但拼接的时候应该ba放前面,因为结果bab最小两个字符串拼接之后再比较,看谁放前面比较合适:比如a和b,看ab和ba...原创 2020-03-06 20:29:28 · 274 阅读 · 0 评论 -
前缀树Trie
前缀树Trie1. Trie的结构Trie前缀树主要用于存储字符串,它的查找速度主要和要查找的字符串的长度相关[O(w)]。前缀树的每一个节点都包含三个元素:在该路径上,添加字符串的过程中经过该节点的次数path在该路径上,以该节点结尾的字符串的个数end节点类型的后继数组next[26],数组长度为26(假设字符串只由26个小写英文字母组成)在以上结构中,用路径上的值来表示字符...原创 2020-03-06 20:28:59 · 232 阅读 · 0 评论 -
并查集
并查集1. 并查集原理与实现原文参考链接:一个非常实用而且精妙的算法-并查集1.1 原理话说在江湖上有很多门派,这些门派相互争夺武林霸主。毕竟是江湖中人,两个人见面一言不合就开干。但是打归打,总是要判断一下是不是自己人,免得误伤。于是乎,分了各种各样的门派,比如说张无忌和岳灵珊俩人要打架,就先看看是不是同一门派的,不是的话那就再开干。要是张无忌和岳灵珊觉得俩人合得来,那就合并门派。而...原创 2020-03-06 20:28:15 · 341 阅读 · 0 评论 -
哈希&布隆过滤器
哈希1. 设计RandomPool结构380. 常数时间插入、删除和获取随机元素题目:设计一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。getRandom(): 等概率随机返回结构中的任何一个key。要求: Insert、delete和getRandom方法的时间复杂度都...原创 2020-03-06 20:26:55 · 306 阅读 · 0 评论 -
二叉树
二叉树1. 遍历二叉树1.1 递归方式递归遍历二叉树非常简单,而且三种遍历方式的代码也非常相同,是因为在这三种方式中,节点被访问的先后顺序是完全一致的。如下图所示如果第一次访问就打印,则为先序遍历如果第二次访问打印,则为中序遍历如果第三次访问打印,则为后序遍历//递归遍历二叉树public class Solution_SearchRecursively { pub...原创 2020-03-06 20:24:16 · 249 阅读 · 0 评论 -
链表
链表1. 反转单向链表反转单向列表,需要两个辅助指针pre和curpublic class Solution_ReverseList { public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } pub...原创 2020-03-06 20:23:27 · 194 阅读 · 0 评论 -
数组
数组1. 旋转矩阵题目:给定一幅由N × N矩阵表示的图像,其中每个像素的大小为4字节,编写一种方法,将图像旋转90度。不占用额外内存空间能否做到?思路:假设左上角矩阵元素为matrix[a] [b],右下角元素为matrix[c] [d]。根据这两个对角元素,可以将矩阵的外圈进行旋转,matrix[a] [b]的值旋转到matrix[a] [d],matrix[c] [d]上的值...原创 2020-03-06 20:21:38 · 400 阅读 · 0 评论 -
栈和队列
栈和队列1. 用数组实现栈和队列题目:用数组结构实现固定大小的栈和队列实现栈public class ArrayStack { public Integer[] arr; public Integer index; public ArrayStack(Integer initSize) { if(initSize < 0){ ...原创 2020-03-06 20:20:58 · 200 阅读 · 0 评论 -
布隆过滤器
原创 2020-02-25 16:06:05 · 159 阅读 · 0 评论 -
链表
链表1. 反转单向链表反转单向列表,需要两个辅助指针pre和curpublic class Solution_ReverseList { public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } pub...原创 2020-02-20 00:36:15 · 160 阅读 · 0 评论 -
排序算法总结
冒泡排序package class_01;import java.util.Arrays;public class BubbleSort { public static int[] bubbleSort(int[] arr){ int len = arr.length - 1; if(arr == null || len < 1){ ...原创 2019-10-18 09:27:28 · 219 阅读 · 0 评论 -
算法技巧——对数器
对数器能够模拟出很多个类似于Online Judge中的样例,根据对数器生成的样例检测自己的代码是否正确。原创 2019-10-18 09:24:21 · 338 阅读 · 0 评论 -
Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return i...原创 2019-07-31 09:49:17 · 126 阅读 · 0 评论 -
Pascal's Triangle II
Given a non-negativeindexkwherek≤33, return thekthindex row of the Pascal's triangle.Note that the row index starts from0.In Pascal's triangle, each number is the sum of the two numbers ...原创 2018-10-18 19:59:48 · 207 阅读 · 0 评论