![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
金三银四算法训练营
算法
Dcwjh
这个作者很懒,什么都没留下…
展开
-
LeetCode 128. 最长连续序列
public int longestConsecutive(int[] nums) { if(nums == null || nums.length == 0) return 0; PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>(){ @Override public in.原创 2021-06-10 19:40:24 · 165 阅读 · 0 评论 -
递归、树
文章目录面试题 17.12. BiNode面试题 16.11. 跳水板面试题 04.12. 求和路径面试题 04.10. 检查子树祖先类的模板题目模板面试题 04.08. 首个共同祖先865. 具有所有最深节点的最小子树1123. 最深叶节点的最近公共祖先剑指 Offer 68 - II. 二叉树的最近公共祖先面试题 04.06. 后继者面试题 04.05. 合法二叉搜索树面试题 04.04. 检查平衡性面试题 04.03. 特定深度节点链表面试题 04.02. 最小高度树剑指 Offer 68 - I.原创 2021-05-21 17:28:41 · 303 阅读 · 0 评论 -
链表汇总
先刷题,在总结文章目录剑指 Offer 06. 从尾到头打印链表剑指 Offer 22. 链表中倒数第k个节点138. 复制带随机指针的链表剑指 Offer 24. 反转链表剑指 Offer 18. 删除链表的节点剑指 Offer 52. 两个链表的第一个公共节点1721. 交换链表中的节点24. 两两交换链表中的节点面试题 02.05. 链表求和725. 分隔链表剑指 Offer 06. 从尾到头打印链表方法一:链表从前遍历,数组从尾开始存储方法二:将链表节点中的值存入栈中,在存入数组中publ原创 2021-05-18 10:37:57 · 349 阅读 · 0 评论 -
1486. 数组异或操作------异或规律
public int xorOperation(int n, int start) { int s = start >> 1; int b0 = n & start & 1; int ans = sumXor(s - 1) ^ sumXor(s + n - 1); return ans << 1 | b0; } private int sumXor(int x...原创 2021-05-08 10:53:11 · 223 阅读 · 0 评论 -
LeetCode. 704 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。方法一:public int search(int[] nums, int target) { int left = 0; int right = nums.length - 1; while(left <= right){ int mid = left原创 2021-04-20 14:03:18 · 106 阅读 · 0 评论 -
LeetCode5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。 public String longestPalindrome(String s){ if(s == null || s.length() < 2) return s; char[] str = s.toCharArray(); boolean[][] dp = new boolean[s.length()][s.length()]; //当前i到j是不是回文字符串原创 2021-04-02 17:25:29 · 111 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 public int numWays(int n) { int a = 0; int b = 1; int sum = 1; for(int i = 0; i < n; i++){ sum = (a+b)%1原创 2021-04-02 15:18:19 · 104 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
递归public int fib(int n) { if(n==0) return 0; if(n == 1) return 1; if(n == 2) return 1; return fib(n - 1)%(1000000007) + fib(n - 2)%(1000000007); }动态规划:为什么返回a,自己可以用纸演算一下,就知道是a了 p.原创 2021-04-02 15:13:43 · 96 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )没啥解释,直接上代码 private Stack<Integer> s1; private Stack<Integer> s2 ; private int size; public CQueue() { s1 = ne原创 2021-04-02 14:54:08 · 98 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。抓住重点,数组内不含重复数字,可以建立映射,从preorder中得出数字然后映射到inorder思路:根节点在preorder中生成,左右子树界限在中序遍历中确定。所以只需保留先序遍历,缓冲中序遍历进map集合//利用原理,先序遍历的第一个节点就是根。在中序遍历中通过根 区分哪些是左子树的,哪些是右子树的 class Solution { int[] preorder;原创 2021-04-02 14:34:06 · 88 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。方法一: 思路:递归 private ArrayList<Integer> ans = new ArrayList(); public int[] reversePrint(ListNode head) { if(head == null) return new int[0]; if(head.next!=null){ reversePrint(head.ne原创 2021-04-01 18:24:39 · 87 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。思路:先统计空格的个数,然后在将原字符从前往后复制上 public String replaceSpace(String s) { //从后往前复制 //第一步统计空格的个数 char[] chr = s.toCharArray(); int count = 0; for(char c: chr){ if(c==' ')原创 2021-04-01 14:05:22 · 77 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。方法一:暴力法,逐一比较(不推荐)方法二:二叉搜索树:从右上角搜索 public boolean findNumberIn2DArray(int[][] matrix, int target) { if(matrix.length == 0) return false; //右角开始原创 2021-04-01 13:55:10 · 92 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
题目:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。解法一:暴力法(超时) public int findRepeatNumber(int[] nums) { //暴力法 for(int i = 0; i < nums.length; i++){ for(int j = i + 1; j <原创 2021-04-01 12:02:29 · 97 阅读 · 0 评论