leedcode
文章平均质量分 50
qinjunu
这个作者很懒,什么都没留下…
展开
-
leedcode-array
窗口中的最大值单调队列窗口中的众数优先队列(排序)使用 map 记录数出现的次数,在窗口移动的时候进行更新,同时加入优先队列,每次取得队列头部,比较其次数是否与map中一致,不一致,移除,一致,即为当前窗口的众数分割,使得子数组的和的最大值最小(leedcode-410)二分...原创 2021-05-07 16:12:43 · 118 阅读 · 0 评论 -
leedcode-二分查找
一 整体有序leedcode35:搜索插入位置leedcode34:查找元素的第一个位置和最后一个位置小于target最后位置:nums[mid]==target -> right移动 -> return right大于target起始位置:nums[mid]==target -> left移动 -> return left等于target起始位置与终止位置与小于大于一致,仅需改变return即可 // 大于target的起始位置 p原创 2021-01-26 22:58:57 · 140 阅读 · 0 评论 -
leedcode-高频
1. 字典序的第k小数字(leedcode - 440)分析(p当前位置):指定前缀下的节点个数如果第k个数字在当前前缀下,进一步寻找:pre *= 10, p++如果第k个数字不在当前前缀下:pre ++, p += count原创 2021-01-09 15:29:57 · 138 阅读 · 0 评论 -
leedcode-对列
1. 单调对列(leedcode - 239)class MonotonicQueue{ public LinkedList<Integer> list = new LinkedList<>(); // 添加元素,将小于num的全部删除 public void add(int num){ while(!list.isEmpty() && list.getLast() < num){ list.re原创 2020-11-01 11:24:24 · 170 阅读 · 0 评论 -
leedcode-二分查找
1. 搜索旋转排序数组(leedcode-33)数组中不存在重复的元素 public int search(int[] nums, int target) { int left = 0; int right = nums.length - 1; int mid; while(left <= right){ mid = (left + right) / 2; if(num原创 2020-08-05 14:05:46 · 114 阅读 · 0 评论 -
leedcode-排序
public void buildMaxHeap(int[] nums, int length) { // 从最后一个非叶子节点依次往前进行遍历 for(int i = length/2 - 1; i >= 0; i--) { adjustDown(nums, i, length); } }原创 2020-07-29 13:40:02 · 116 阅读 · 0 评论 -
leedcode-并查集
并查集实现parent:记录每个节点的父节点size:记录每棵树的重量,目的是 union 后树依然保持平衡性路径压缩:保证任意数的高度为常数public class UF { // 连通分量个数 private int count; // 存储一个树 private int[] parent; // 记录树的重量(将小一些的树接到大一些的树下面) private int[] size; public UF(int n) { this.count = n原创 2020-06-17 21:09:24 · 175 阅读 · 0 评论 -
leedcode-栈
括号的合法性单括号记录左右括号个数,当右括号个数大于左括号个数,返回 false多括号 public boolean isValid(String s) { HashMap<Character, Character> map = new HashMap<>(); map.put('(', ')'); map.put('[', ']'); map.put('{', '}'); Stack<Character>原创 2020-06-16 01:10:47 · 123 阅读 · 0 评论 -
leedcode-链表
反转链表(leedcode-206)创建一个 newHead,在头节点逐个插入 public ListNode reverseList1(ListNode head) { ListNode newHead = null; ListNode p1 = head, p2 = head; while(p1 != null) { p2 = p1.next; p1.next = newHead; newH原创 2020-06-15 14:06:03 · 117 阅读 · 0 评论 -
leedcode-贪心算法
区间调度区间调度详解跳跃游戏leedcode-55问题描述:给定一个非负整数数组,最初位于数组的第一个位置,数组中的每个元素代表你在该位置可以跳跃的最长长度,判断是否能够到达最后一个位置思路1从后往前遍历 public boolean canJump(int[] nums) { int last = nums.length-1; for(int i=nums.length-2; i>=0; i--) { if(nums[i]+i >原创 2020-06-14 21:53:24 · 249 阅读 · 0 评论 -
leedcode-双指针
双指针简介分为两类:快慢指针:主要解决链表中的问题左右指针:主要解决数组 / 字符串中的问题快慢指针判断链表中是否含有环借助哈希表(判断哈希表中是否含有当前节点)使用快慢指针(快指针每次走两步,如果有环,二者会相遇)已知链表中含有环,返回这个环的起始位置思路:先寻找快慢指针相遇的点当二者相遇时,让其中一指针指向头节点,然后以相同的速度前进,再次相遇时所在的节点位置就是环开始的位置证明:第一次相遇,假设 slow 走了 k 步,则 fast 走了原创 2020-06-14 15:31:59 · 185 阅读 · 0 评论 -
leedcode-LRU
LRU缓存机制(leedcode-146)题目描述:设计和实现一个 LRU(最近最少使用)缓存机制;它应该支持以下操作:获取数据 get 和写入数据 putget(key):如果关键字存在于缓存中,则获取该关键字的值,否则返回 -1put(key, value):如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间时间复杂度:O(1)方法一:自己实现分析:put 和 get原创 2020-06-12 18:04:15 · 163 阅读 · 0 评论 -
Java
Array.toString()在实际项目中,如果想要把数组中的内容打印出来,直接使用toString方法只会打印出数组的地址int[] twoSum(){}public static void main(String[] args){ System.out.println(Arrays.toString(ans));}...原创 2019-10-09 15:57:21 · 118 阅读 · 0 评论 -
leedcode-区间
最大不重叠子集(leedcode-435)问题描述:求最大不重叠子集采用贪心算法 解法排序:按 end 排序思想:从区间集合中选择一个区间 x,这个 x 是当前所有区间中结束最早的( end 最小)把所有与 x 区间相交的区间从集合中删除重复步骤 1 和 2,直到集合为空区间合并(leedcode-56)问题描述:给出一个区间的集合,请合并所有重叠的区间排序:按 start 排序区间交集(leedcode-986)问题描述:给定两个由一些闭区间组成的列表原创 2020-06-09 00:31:31 · 219 阅读 · 0 评论 -
leedcode-floodfill
构建框架图的遍历// (x, y) 为坐标位置 void fill(int x, int y) { fill(x - 1, y); // 上 fill(x + 1, y); // 下 fill(x, y - 1); // 左 fill(x, y + 1); // 右}leedcode颜色填充问题描述:实现颜色填充功能,待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的横坐标为 sr 纵坐标为 sc。需要填充的新颜色为 new原创 2020-06-08 14:23:49 · 105 阅读 · 0 评论 -
leedcode-小知识
前缀和问题描述:给定一个整数数组(含有负数)和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数preSum[nums.length + 1]:记录 [0…i-1] 的和(必须记录 0)nums[i…j] = preSum[j+1] - preSum[i]优化:借助哈希表,在记录前缀和的同时记录该前缀和出现的次数...原创 2020-06-07 23:57:52 · 159 阅读 · 0 评论 -
leedcode-滑动窗口
代码框架 public void slidingWindow(String s, String t) { HashMap<Character, Integer> need = new HashMap<>(); HashMap<Character, Integer> window = new HashMap<>(); for(char c : t.toCharArray()) { need.put(原创 2020-06-06 17:04:30 · 154 阅读 · 0 评论 -
leedcode-回溯
全排列 List<List<Integer>> ans = new ArrayList<>(); public List<List<Integer>> permutation(int[] nums){ List<Integer> track = new ArrayList<>(); backtrack(nums, track); return ans; } public void原创 2020-06-05 15:54:55 · 127 阅读 · 0 评论 -
leedcode-动态规划
标准套路明确 状态 和 选择明确dp数组的定义根据选择,思考状态转移的逻辑处理边界情况最长回文子串(leedcode-5)问题描述: 给定一个字符串 s,找到 s 中最长的回文子串。dp数组: dp[s.length()][s.length()](记录 i 到 j 之间是否是回文,true/false)dp公式:dp[i][j] = dp[i+1][j-1] && s.charAt(i) == s.charAt(j);边界:dp[i][i] = true; dp.原创 2020-05-24 15:47:00 · 743 阅读 · 0 评论 -
leedcode-二叉树
基本方法由数组构造二叉树(null 用 0 表示)先序,中序,后序,层次遍历(递归,迭代)深度public class TreeNode{ public int val; public TreeNode left; public TreeNode right; public TreeNode(int x){ val = x; } }构建二叉树 public TreeNode createBinaryTree(int[] array, int in原创 2020-05-12 17:10:44 · 333 阅读 · 0 评论