左神算法初级
看这个题真好看
机器学习+深度学习+leetcode+随时准备转行
展开
-
Leetcode64最小路径和(暴力递归转动态规划)
递归版本: class Solution { public int minPathSum(int[][] grid) { //一共三种情况,左右都可以,只能左,只能有 int m=grid.length; int n=grid[0].length; return dfs(grid,0,0,m,n); } pu...原创 2019-10-13 20:38:41 · 169 阅读 · 0 评论 -
(超级无敌重要,背下来背下来)Leetcode(46,47,78,90,39,40)dfs和回溯(全排列)
简单的打印全排列:dfs,用标记数组used标记是否用过 package leetcode160; public class queue { static int count=0; public static void main(String[] args) { char[] chs= {'a','b','c'}; int[] used=new int[3]; char[] t...原创 2019-10-13 12:23:20 · 185 阅读 · 0 评论 -
验证完全二叉树
分几个情况:1.如果遇到有右子树没有左子树直接返回false 2.如果没有右子树,或者都没有,开启一个新的状态,判断他后面所有的节点是否是叶子节点,此程序包括了测试 import java.util.LinkedList; import java.util.Queue; import java.util.Stack; import javax.swing.tree.TreeNode; pub...原创 2019-10-07 17:02:21 · 447 阅读 · 0 评论 -
Leetcode222求完全二叉树节点的个数
以根节点右子树的左边界是否等于高度为分界,如果等于,左子树一定满了,可以用公式计算出来,如果不等于,那么右子树满了,计算出来,在递归计算另一部分不满的,递归的baseline就是high==level的时候,因为递归的最后就是一个节点。 /** * Definition for a binary tree node. * public class TreeNode { * int v...原创 2019-10-07 21:26:07 · 92 阅读 · 0 评论 -
Leetcode380插入删除获取随机元素(双map解法)
双map解法,不要自己去实现哈希表,改结构,哈希表是等概率分布,是大样本的情况下,小样本可不一定满足,你不能保证每个位置都有元素,如果重新随机,那么时间复杂度是不是就不是o1了呢,所以用java自带的map即可 class RandomizedSet { /** Initialize your data structure here. */ int size; HashM...原创 2019-10-08 20:05:47 · 61 阅读 · 0 评论 -
布隆过滤器和java的bitset(他的思想是布隆过滤器的核心思想,而且在大数据处理中太有用了)
推荐一篇博文:BitSet 手撸一个布隆过滤器?算了,,,以后实现。。。,可以用bitset加快速度原创 2019-10-09 10:01:21 · 166 阅读 · 0 评论 -
一致性哈希听的有点迷
ww原创 2019-10-09 10:24:32 · 64 阅读 · 0 评论 -
并查集
并查集:并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。不过需要注意并查集虽然可以进行合并操作,但是却无法进行分割操作, 1.查询元素a和元素b是否属于同一组 2.合并元素a和元素b所在的组 所以有两个操作,分别是1.判断是否是一个集合,2.合并含有这俩个元素的集合 重点: 每一次查找的时候进行优化,就是把每个集合打平,让他们直接和老大相连。 两个集合进行合并的时候,小...原创 2019-10-09 15:14:28 · 73 阅读 · 0 评论 -
LeetCode200岛的数量
方法1:dfs(递归或者用栈) class Solution { //DFS public int numIslands(char[][] grid) { if(grid==null||grid.length==0||grid[0].length==0){ return 0; } int m=grid.leng...原创 2019-10-09 19:42:23 · 81 阅读 · 0 评论 -
Leetcode208实现前缀树(Trie)
leetcode有一个功能没有实现就是查询给个前缀,查以这个 前缀结束的数量,其实很简单就是找前缀方法把path划过的次数输出即可,这个前缀树很简单,但是一定要把字母放在边上,不要放在节点里面,否则很难做 class Trie { public static class TrieNode{ int path; int end; TrieNod...原创 2019-10-10 16:24:08 · 104 阅读 · 0 评论 -
贪心算法之切金条
题目: 一块金条切成两半,是需要花费和长度数值一样的铜板的。比如 长度为20的 金条,不管切成长度多大的两半,都要花费20个铜 板。一群人想整分整块金 条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为 10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长 度60的金条分成10和50,花费60 再把长度50的金条分成20和30...原创 2019-10-11 09:16:12 · 549 阅读 · 0 评论 -
Leetcode 502IPO(项目最大利润)
题不难,不属于hard,应该算中,贪心策略很符合人的思维,就是在能够做的项目里选择利润最大的去做,没做一次重新更新能做的项目,再去选,这里用了一个大根堆和一个小根堆, class Solution { public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) { int res=0...原创 2019-10-11 10:48:51 · 238 阅读 · 0 评论 -
宣讲会议室最多
题目:一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目 的宣讲。 给你每一个项目开始的时间和结束的时间(给你一个数 组,里面 是一个个具体的项目),你来安排宣讲的日程,要求会 议室进行 的宣讲的场次最多。返回这个最多的宣讲场次 public class Code_06_BestArrange { public static class Program { public int st...原创 2019-10-11 12:18:51 · 199 阅读 · 0 评论 -
Leetcode122 买卖股票的最佳时机Ⅱ
峰谷法(我用的贪心但是发现实现是一样的) class Solution { public int maxProfit(int[] prices) { //贪心,交易次数最少,如果题目限制交易次数,用他 int i=0; int j=0; int sum=0; for(int k=0;k<prices.le...原创 2019-10-11 13:17:47 · 97 阅读 · 0 评论 -
lintcode上有汉诺塔的题
,,原创 2019-10-11 18:04:11 · 85 阅读 · 0 评论 -
LeetCode98验证二叉搜索树
方法1:中序遍历是升序的就是二叉搜索树,所以可以遍历一遍,然后判断即可,可以用队列存放遍历元素,用数组是不行的,因为大小不知道。。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * ...原创 2019-10-07 16:59:00 · 85 阅读 · 0 评论 -
Leetcode110平衡二叉树
这个题,用到一个套路就是树形BP,这个套路进阶才讲。重点时列出所有的可能性,记住递归遍历二叉树无论怎么遍历,都是访问每一个节点三次,所以可以统计信息返回。当然自己用栈实现的遍历二叉树不一定时三次 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode l...原创 2019-10-07 10:20:40 · 110 阅读 · 0 评论 -
Leetcode297 树的序列号和反序列花
左神讲过,可`以采用先序遍历,后续和中序,其实怎么序列就怎么反过来 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } ...原创 2019-10-06 16:10:06 · 375 阅读 · 0 评论 -
左神-初级-二讲-荷兰其问题&&leetcode75
就是多个小于区域,大于区域呗,如果四色问题,可以把两个颜色当一个做 class Solution { public void sortColors(int[] nums) { int low=-1; int high=nums.length; int cur=0; while(cur<high){ ...原创 2019-10-02 10:26:26 · 85 阅读 · 0 评论 -
左神-初级-二讲-快排(标准+改进版)
标准版,每次确定一个元素位置 public class leet832__1 { public static void main(String[] args) { int[] a= {2,1,33,5,43,222,3,12}; quickSort(a,0,a.length-1); for(int i:a) { System.out.p...原创 2019-10-02 12:26:12 · 267 阅读 · 0 评论 -
左神-基础-二讲-堆和堆排序
public class leet832__1 { /** * 堆排序最重要的两个函数就是:上浮和下沉 * 上浮:插入元素时发生 * 下沉:删除元素(必发生在顶部)或者修改元素变小 * * 构建堆:可以从头遍历进行上浮 * 也可以从n/2-1位置进行下沉 * * * 堆的一些重要特点:i结点的父结点下标就...原创 2019-10-14 20:10:54 · 221 阅读 · 0 评论 -
关于稳定性和排序
基本的排序除了快排和选择排序和堆排序一定不能实现稳定 ,其他都可以实现,稳定性在现实中也很有用,有时候需要保留一些信息,例如年纪成绩排名 ...原创 2019-10-04 09:08:45 · 82 阅读 · 0 评论 -
Leetcode164最大间隔
桶排序,n个数,n+1个桶,因为鸽巢原理,最大间隔在桶间 有个问题,就是如果求索引那块代码,如果用int就报错,贼烦 class Solution { public int maximumGap(int[] nums) { if(nums.length<=1){ return 0; } int len=nums....原创 2019-10-04 13:39:12 · 123 阅读 · 1 评论 -
数组实现栈和对列
数组实现栈,过于简单,只写了peek和push方法 package leetcode160; public class Stack { int size=0; Integer [] a; public Stack(int size) { if(size<0) { System.out.println("不对"); return; } a=new Integer...原创 2019-10-04 14:22:58 · 93 阅读 · 0 评论 -
Leetcode155最小栈
用两个栈实现的,最主要是,java中的Integer的==比较操作,只有在-127-127之间才会自动转换,如果超过这个范围,==就比较的是地址了,这个错我找了好久啊,包括在eclipse实验(用的1),我还以为是版本问题。。 class MinStack { /** initialize your data structure here. */ Stack<Integer...原创 2019-10-04 16:30:42 · 47 阅读 · 0 评论 -
LeetCode255用对列实现栈
方法1:用一个对列实现栈,其实复杂在入队,其他都是直接调用系统方法,入队,如果入队之后,队长度为1,不进行操作,否则,就把刚入队的元素调整到栈顶(队首)其实就是把其余元素在入队,这样构成的对列,始终和栈的结构是一样的 class MyStack { LinkedList<Integer> l1=new LinkedList(); /** Initialize your ...原创 2019-10-04 18:03:19 · 206 阅读 · 0 评论 -
LeetCode232 用栈实现对列
方法1:用两个栈,操作集中在push,始终让stack栈保持先进先出状态,就是如果空,直接进,如果有元素,就转移到help栈,然后压入,在从help栈呀回来 class MyStack { Queue<Integer> qu; Queue<Integer> help; /** Initialize your data structure here. ...原创 2019-10-04 18:38:41 · 120 阅读 · 0 评论 -
猫狗问题
完整代码,可测试的请看左神代码 package org.shi; import java.util.LinkedList; public class Code_04_DogCatQueue { public static class Pet { private String type; public Pet(String type) { this.type = type; ...原创 2019-10-04 22:59:37 · 186 阅读 · 0 评论 -
Leetcode54螺旋打印矩阵
用左神一句话,就是要有宏观思想,不要去想怎么一步步走,扣边界,很多数组旋转或者什么形状打印,都宏观想一下,这个题是一圈一圈的往里打印。 class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res=new LinkedList(); ...原创 2019-10-05 08:52:56 · 86 阅读 · 0 评论 -
Leetcode48旋转图像90°
从最外圈开始打印,对于每一个圈,每次交换四个元素的位置 class Solution { public void rotate(int[][] matrix) { if(matrix.length==0||matrix[0].length==0){ return; } int startRow=0; i...原创 2019-10-05 09:24:17 · 71 阅读 · 0 评论 -
实现树的递归和非递归遍历
package 布隆过滤器; import java.util.Stack; public class Code_02_PrintBinaryTree { public static class Node { public int value; public Node left; public Node right; public Node(int data) { t...原创 2019-10-05 16:44:16 · 72 阅读 · 0 评论 -
找出二叉树某一个节点的后继节点
public static class Node { public int value; public Node left; public Node right; public Node parent; public Node(int data) { this.value = data; } } //找后继 public static Node get...原创 2019-10-06 12:45:56 · 101 阅读 · 0 评论 -
左神算法基础-二讲-1-给定一个数组arr,和一个数num,请把小于等于num的数放在数 组的左边,大于num的数放在数组的右边
就是从-1开始,划分小于此值区域和大于此值区域,然后从头遍历数组,让小于部分区域不断扩大,直到扩到目标元素,注意这个题没说放在这个数的左右,而是数组的左右 public class leet832__1 { public static void main(String[] args) { int [] a= {11,223,3,45,678,5,455,32}; ...原创 2019-10-02 09:54:43 · 1422 阅读 · 1 评论