LeetCode
Mai_java
这个作者很懒,什么都没留下…
展开
-
LeedCodeNO.20栈的应用
栈的学习过程–LeedCodeNo.20练习题题目内容代码实现 import java.util.Stack;public class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for (i...原创 2019-06-03 17:35:36 · 88 阅读 · 0 评论 -
二分查找法的各种情况
感谢这位大佬整理了这么的多种使用二分查找法的提醒大佬的博客原创 2019-07-31 11:14:33 · 82 阅读 · 0 评论 -
寻找特定的数字-只出现一次的数字问题总结
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。解决与优化方法一 使用HashSet 如果已经存在就remove就行,然后迭代器输出由于一个数与自身异或是0,那么由题目所有数值异或出来的就不是0,记录得到数字第一个为1的位数。然后根据这个位数可以将数组中两个不为0的数字分为两组,然后把分组的异或就行两次遍历 时间复杂度为O(n)代码第...原创 2019-07-31 11:53:00 · 253 阅读 · 0 评论 -
孩子们的游戏
问题描述然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)分析首先设定...原创 2019-07-31 16:50:11 · 109 阅读 · 0 评论 -
不用加减乘除做加法
问题分析方法一:用java自带的方法库import java.math.BigInteger;public class Solution {public int Add(int num1,int num2) {BigInteger bi1=new BigInteger(String.valueOf(num1));BigInteger bi2=new BigInteger(String...原创 2019-07-31 17:21:39 · 67 阅读 · 0 评论 -
改变任意一个数,判断一个序列的最大连续上升子序列长度
问题描述改变一个数字,判断一个序列的最大连续上升子序列长度问题分析遇到的问题!在对对象进行假设性试验 操作时候!不要!改变!原来的!数据结构!实现思路首先是判断一个序列的最大连续上升序列长度方法 public static int maxlength(int[] word) { int len = 1; int maxn = 1; i...原创 2019-07-23 12:06:50 · 723 阅读 · 0 评论 -
公共连续子串
问题描述给两个字符串可能有空格,找出公共连续子串问题分析将一个字符串,遍历分割,然后每次遍历分割出来的子串使用indexOf()方法,如果返回-1则不存在。import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(Sy...原创 2019-07-23 12:21:54 · 112 阅读 · 0 评论 -
链表中环的入口结点
问题描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。问题分析方法一:时间复杂度O(n) 空间复杂度O(n);import java.util.*;/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.v...原创 2019-08-01 11:06:08 · 67 阅读 · 0 评论 -
求数据的中位数
问题描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。问题分析用一个最大堆和一个最小堆来实现用下面语句来实现交替传入数据用num与堆顶数值比较 如果比最大...原创 2019-08-02 09:44:33 · 270 阅读 · 0 评论 -
滑动窗口的应用
文章目录问题一 leetcode438.异位字符串问题二 leetcode76 最小覆盖子串问题一 leetcode438.异位字符串给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母class Solution {public List<Integer> findAnagrams(Strin...原创 2019-08-08 16:45:31 · 242 阅读 · 0 评论 -
滑动窗口里数值的最大值
问题描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};问题解答设立begin为滑动窗口的前索引,i为后索引。那么当begin>=0时 此时滑动窗口最大值才有意义。用双端队列来存储数组的索引信息,把当前最大值的索引维持在队首如...原创 2019-08-02 11:45:33 · 114 阅读 · 0 评论 -
N sum问题(由2-sum 3-sum 4-sum 总结)
问题描述n-sum问题 就是给定一个数组和一个target 求选取n个数相加等于target的所有取值总得分析这类方法基本都可以由暴力法双指针法哈希表法而哈希表法又可以优化成,每添加一个就查找一次如果是指针法可以用下面代码来跳过重复值while(i!=start&&num[i]==num[i-1]);i++;2-sum先查找a固定a 再查找b3-s...原创 2019-08-06 16:14:07 · 780 阅读 · 0 评论 -
查漏补缺个人总结
数据结构Java语言数据库GCsocket小细节算法题原创 2019-08-05 17:37:54 · 971 阅读 · 0 评论 -
判断同构字符串
问题描述给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。输入: s = “egg”, t = “add”输出: true解决方法方法一 Map 时间复杂度较大import java.util.HashM...原创 2019-08-09 09:56:59 · 825 阅读 · 0 评论 -
Top K
题目描述显而易见,就是从数据中选取最大或者最小K个元素解答方案方案一 排序对数组进行排序,再返回最后 k 个元素算法的时间复杂度为 O(NlogN) 空间复杂度为 O(1)方案二 优先队列(堆)建立一个最小堆,维持堆的大小为k 则遍历完整个数组后,堆里面的元素就是TOP K时间复杂度 : O(Nlogk)空间复杂度 : O(k)方案三快速排序的变形版step1:按照基准...原创 2019-08-07 09:36:47 · 69 阅读 · 0 评论 -
熟悉回溯思路-N皇后问题
问题描述n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例:输入: 4输出: [[".Q…", // 解法 1“…Q”,“Q…”,...原创 2019-08-14 18:42:26 · 101 阅读 · 0 评论 -
算法链表
问题描述给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。代码分析slow用来指向排除重复后的最后一个节点,fast用来指向重复元素的最后一个节点如果slow.next==fast说明中间没有重复元素可以直接slow=slow.next;不然说明fast的 元素需要跳过使用dummyhead也解决了从头节点开始重复的情况class Solution...原创 2019-09-09 16:29:35 · 161 阅读 · 0 评论 -
判断数组是否是BST的后序遍历结果
问题描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。问题分析受之前根据前序后序遍历的题目影响,知道用序号标记来判断左子树,右子树的数组。这里在递归方法里面 for循环外定义一个i; 这样可以在两个for循环都使用同一个i。可以避免新定义一个变量来分界 左子树和右子树序列当不等于时候 break...原创 2019-07-22 12:32:21 · 290 阅读 · 0 评论 -
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
问题描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。问题分析题目很简单,用队列写层序遍历就行,不过题目要求返回的ArrayList 所以当root=null时,应该new一个ArrayList 而不是return nullimport java.util.ArrayList;import java.util.LinkedList;import java.util.Queue...原创 2019-07-22 11:50:03 · 90 阅读 · 0 评论 -
栈的压入弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)问题分析while (j<popA.length&&stack...原创 2019-07-22 11:31:43 · 65 阅读 · 0 评论 -
LEETCODE 938. 二叉搜索树的范围和
题目描述给定二叉搜索树的根结点 root,返回L,R数值(包括L R)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。解决方案遍历(哪一种都可以)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNod...原创 2019-07-13 17:55:00 · 76 阅读 · 0 评论 -
LeetCode 169. 求众数
文章目录题目描述暴力法投票法哈希表题目描述求一个数组中的众数(众数一定存在)且众数出现次数大于nums.length/2暴力法暴力法由一个哈希表 两层循环遍历 时间复杂度较大class Solution { HashMap<Integer,Integer> hashMap=new HashMap<>(); public int majorityEl...原创 2019-07-18 09:19:35 · 76 阅读 · 0 评论 -
LeetCode 225 232 用队列和栈相互实现
文章目录用栈实现队列入队出队与查看队首时间复杂度分析用队列实现栈双队列入栈出栈与查看栈顶用单队列,实现栈入栈出栈和查看队首用栈实现队列将一个栈的元素全部pop,push到另外一个栈入队入队直接将元素存入 Stack S1中即可。不过为了方便实现Peek(),我们引入了一个参数front,将s1中最下面的元素定为s1. public void push(int x) { ...原创 2019-07-16 10:10:07 · 70 阅读 · 0 评论 -
LeetCode 783. 二叉搜索树结点最小距离
题目内容给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。解题思路其实就是对数排序,然后对相邻的元素进行相减,取出最小的差。代码class Solution { public class TreeNode { int val; TreeNode left; TreeNode right; Tr...原创 2019-07-16 16:12:51 · 92 阅读 · 0 评论 -
LeetCode 617. 合并二叉树
题目描述需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。代码分析想!递!归!!!起初考虑错误,想用层序遍历。 public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if (t1==null&&...原创 2019-07-16 17:36:38 · 71 阅读 · 0 评论 -
判断循环单词
问题描述如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。现在给出n个单词,需要统计这个n个单词中有多少种循环单词。问题分析别人的代码自己的只通过 80%import java.util.Scanner;public class Main { public int cycleWordK...原创 2019-07-23 17:10:01 · 190 阅读 · 0 评论 -
LeetCode 226. 翻转二叉树
题目将2叉树翻转实现(记得看看)一个递归就行,想清楚递归条件class Solution { public class TreeNode{ int val; TreeNode left,right; TreeNode(int x){ val=x; } } public Tree...原创 2019-07-16 18:31:28 · 51 阅读 · 0 评论 -
LeetCode 104. 二叉树的最大深度
问题描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。代码 class Solution { public int maxDepth(TreeNode root) { if (root == null) return 0; int left_depth = maxDepth(root...原创 2019-07-16 22:07:23 · 48 阅读 · 0 评论 -
二叉树中和为某一值的路径
问题描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)问题分析通过传递参数 写一个递归判断到叶子节点时候和是否为targetPS!记录路径的数组列表是同一个数组列表 在一个路径递归完成时候,应该还原到原来的数据。在这里用递归到底时候...原创 2019-07-24 10:09:17 · 71 阅读 · 0 评论 -
二叉搜索树写成双向链表
问题描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。问题分析只能用中序遍历如果用其他遍历,在遍历时候会改变右子树结构,然后破坏遍历后序遍历 有死循环 待解决public class Solution { TreeNode head = null; TreeNode realHead = null; ...原创 2019-07-24 12:32:04 · 69 阅读 · 0 评论 -
给出前序与中序遍历 还原二叉树
文章目录问题描述与分析分析自己实现的问题大佬的实现问题描述与分析输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析由前序遍历可知道,第一个数是root。再由中序遍历可以知道,root前面的为左子树的中...原创 2019-07-19 18:16:05 · 277 阅读 · 0 评论 -
字符串排序,可能有重复字母
参考大佬的博客问题描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。问题分析String.valueOf() 方法将不同类型打印成字符串。Collection.sort()将字符串排序的流程即从第1位开始和后面每位数进行交换然后递归到第二位进行同样操作。...原创 2019-07-24 15:28:08 · 437 阅读 · 0 评论 -
链表反转 LeetCode206. 反转链表
迭代法定义了一个prev 一个cur 一个temppublic ListNode reverseList(ListNode head) { ListNode prev = null; ListNode cur = head; while (cur != null) { ListNode nextTemp = curr.next; cur....原创 2019-07-17 17:27:34 · 70 阅读 · 0 评论 -
LeetCode 136. 只出现一次的数字
题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。异或法这个方法很独特。当一个数字不停异或时候,异或两次时候会还原成其他值异或的值。所以所有值异或后,只会剩一个一次的值class Solution { public int singleNumber(int[] nums) { int a=nums[0]...原创 2019-07-17 18:28:02 · 63 阅读 · 0 评论 -
输出链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。首先,大部分题目是不允许改变给出的数据结构来进行解答,否则会报错。然后,考虑问题不能考虑正常情况 ,题目中没有说k不等于0而且链表是否为空。则本来是让p先跑k-1个结点,这个时候要先跑k次(因为判断条件是p.next!=null而不是p!= null,这种判断条件可以排除k=0且head==null的情况。如果K=0 pre跟着p一起跑到null...原创 2019-07-21 10:48:46 · 96 阅读 · 0 评论 -
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)代码分析首先实现一个//判断根节点相同的两个树 B是不是A的子树(这里面 当root2==null时候应该返回true,而不是题目设置的返回false 记得要注意)然后再方法里面运用这个方法,刚开始写的的先判断是不是结点相等在运用isSubTree方法。 之后发现可以直接return 用短路或...原创 2019-07-22 09:49:44 · 116 阅读 · 0 评论 -
找中位数
无序数组找中位数排序后再找 时间复杂度为O(nlogn)建立大小为n/2+1的最大堆,如果比堆顶大的则舍去如果是奇数则堆顶就是中位数如果是偶数则取出两位求平均值 o(nlogk)parition操作建立一个partition方法partition(int[] arr , int start , int end){int left = start;int right = end;...原创 2019-09-11 17:29:08 · 299 阅读 · 0 评论