LeetCode
小迷糊171
不要假装很努力,结果不会陪演戏。
展开
-
数据结构——堆排序
根节点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称为最大堆(大顶堆)。大顶堆要求根节点的关键字既大于或等于左子树的关键字值,又大于或等于右子树的关键字值。...原创 2021-09-22 11:25:04 · 102 阅读 · 0 评论 -
索引、B+树
leetcode 117. 填充每个节点的下一个右侧节点指针 II在这道题的评论中,有个人回复此题的意义,说 “像是 mysql 的 B+树 的数据结构,这个 next 就是为了范围搜索的时候,不用再次遍历整个树,而是从begin 位置找 next 节点一直找到不满足条件的节点即可。需要强调的一点是,mysql 的 B+ 树只在叶子节点上建立 next 指针,非叶子节点不会有 next 指针。”而且,之前的面试时,面试官曾经问我索引的作用,特此来复习一下。1. 索引索引是对数据库表中 一列或多列.原创 2021-08-19 09:51:28 · 177 阅读 · 0 评论 -
先序+后序遍历不能确定一棵二叉树
如上图两个树,先序遍历都为ab,后序遍历都为ba。一般来说,如果二叉树中存在度为1的节点,则根据 先序 和 后序 遍历不能唯一确定该二叉树。leetcode 106. 从中序与后序遍历序列构造二叉树参考自:https://zhidao.baidu.com/question/530938551.html...原创 2021-08-16 12:46:34 · 728 阅读 · 0 评论 -
Java 迭代实现二叉树的前、中、后序遍历
前序遍历最为简单,因为其 要访问的元素 和 要处理的元素 顺序是一致的,都是中间节点。1、前序遍历: public List<Integer> preOrder(TreeNode root){ Deque<TreeNode> stack = new ArrayDeque<>(); List<Integer> res = new ArrayList<>(); stack.push(root); while(!stack.isEm原创 2021-08-12 14:15:52 · 182 阅读 · 0 评论 -
刷题——二叉树
二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值原创 2021-08-11 13:05:21 · 103 阅读 · 0 评论 -
平衡二叉树高度的时间复杂度
没有树的任何信息,可对树的每个节点访问一次,O(N)如果是一个平衡树,我们只需要遵循一个分支,并且平衡树的属性确保分支长度为O(log(N)),所以针对某个分支的时间复杂度为O(logN)参考:二叉平衡树的算法复杂度笔记递归计算二叉树高度的函数的时间复杂度...原创 2021-08-09 11:28:08 · 2229 阅读 · 0 评论 -
等差、等比数列的通项、前n项和
原创 2021-08-04 11:13:55 · 681 阅读 · 0 评论 -
快慢指针确定链表中间结点
使用快慢指针判断链表的中间结点时,1)slow 和 fast 指针都从链表的头结点开始执行,判断条件为 while (fast.next != null && fast.next.next != null) slow 从链表的头结点开始执行,fast 从链表的头结点的下一结点开始执行,判断条件为:while (fast != null && fast.next != null) 代码如下所示: public ListNode sortList(ListN原创 2021-05-16 11:05:06 · 311 阅读 · 0 评论 -
快速排序
参考自:https://www.bilibili.com/video/BV1at411T75o?from=search&seid=14241792087840213797快速排序的基本思想:1、选定Pivot中心轴2、将大于Pivot的数字放在Pivot的右边3、将小于Pivot的数字放在Pivot的左边4、分别对左右子序列重复前三步操作指针移动的条件(比如说先移动的是R指针,以第一个下标作为Pivot):1)当R指针下标位置的数,大于 Pivot 时,不对下标处的数进行操作,原创 2021-04-04 10:43:58 · 643 阅读 · 0 评论 -
LeetCode 383 —— 赎金信
https://leetcode-cn.com/problems/ransom-note/solution/java-1ms-da-lao-xie-fa-fei-yuan-chuang-dai-ma-by-f/很奇妙的想法,膜拜大佬:class Solution { public boolean canConstruct(String ransomNote, String magazine) { if(magazine.length() < ransomNote.lengt原创 2021-02-21 22:20:01 · 125 阅读 · 0 评论 -
LeetCode 374 —— 猜数字大小
https://leetcode-cn.com/problems/guess-number-higher-or-lower/我的解法: public static int guessNumber(int n) { int left = 0; int right = n; int mid = left + (right-left)/2; while(guess(mid)!=0){ int result = guess(mi原创 2021-02-20 09:49:37 · 90 阅读 · 0 评论 -
LeetCode367——有效的完全平方数
https://leetcode-cn.com/problems/valid-perfect-square/给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。class Solution { public boolean isPerfectSquare(int num) { int low=0, high=num; while(low<=high) { int mid =原创 2021-02-19 10:25:44 · 99 阅读 · 0 评论 -
LeetCode 345 —— 反转字符串中的元音字母
class Solution { public String reverseVowels(String s) { char[] sToChar = s.toCharArray(); char[] vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}; int i=0, j=sToChar.length-1; char charI='1', charJ='1'; for(;i<=j &&am原创 2021-02-18 10:42:24 · 104 阅读 · 1 评论 -
两行代码,判断一个数字是否为3的幂、4的幂、5的幂··· ···
class Solution { public boolean isPowerOfThree(int n) { if(n<3)return n==1; return (n%3==0)?isPowerOfThree(n/3):false; }}class Solution { public boolean isPowerOfFour(int n) { if(n<4)return n==1; return原创 2021-02-16 21:40:34 · 251 阅读 · 0 评论 -
leetcode67——二进制求和
我开始使用的是最笨的方法,还出现溢出现象了,相信能猜到是什么解法。char类型可以进行加减:https://blog.csdn.net/xiaozhouchou/article/details/54350113解法:原创 2021-02-15 14:42:07 · 94 阅读 · 0 评论 -
LeetCode290 —— 单词规律
https://leetcode-cn.com/problems/word-pattern/使用双向反射package leetcode;import java.util.HashMap;import java.util.Map;public class Test { public static boolean wordPattern(String pattern, String s) { String[] arrayStr = s.split(" "); char[]原创 2021-02-15 14:07:28 · 99 阅读 · 0 评论 -
LeetCode283——移动零
https://leetcode-cn.com/problems/move-zeroes/1、官方题解——双指针使用双指针,左指针指向当前已经处理好的序列(非0序列)的尾部,右指针指向待处理序列的头部。右指针返回0,则右指针右移;右指针返回非0,则左右指针指向的值交换位置,左右指针都右移。class Solution{ public void moveZeroes(int[] nums){ int n = nums.length, left=0, right=0; while(right原创 2021-02-08 10:59:04 · 80 阅读 · 0 评论 -
LeetCode 258 —— 各位相加
https://leetcode-cn.com/problems/add-digits/comments/一、找规律参考自 LeetCode 用户 Awful-Leo(2019-04-02),只能说大佬tql ,数学太好了规律一:假如一个三位数 abc,其值为:s1=100a+10b+c,经过一次各位相加后,变为:s2=a+b+c,减小的差值为:(s1-s2)=99a+9b,可以发现,差值可以被9整除,每一个循环都这样,缩小了9的倍数。或者说,s1=(99a+9b) + (a+b+原创 2021-02-04 10:01:12 · 176 阅读 · 0 评论 -
LeetCode242——有效的字母异位词
https://leetcode-cn.com/problems/valid-anagram/法一:放到数组中排序,比较两个数组是否相同 public static boolean isAnagram(String s, String t) { if(s.length() != t.length()) { return false; } char[] str1 = s.toCharArray(); char[] str2 = t.toCharArray(); Arrays.so原创 2021-02-01 10:54:07 · 76 阅读 · 0 评论 -
LeetCode237——删除链表中的节点
https://leetcode-cn.com/problems/delete-node-in-a-linked-list/看到题解的描述就可以写出答案了,脑袋要灵活!原创 2021-01-31 23:17:19 · 83 阅读 · 1 评论 -
LeetCode235——二叉搜索树的最近公共祖先
一、二叉搜索树二叉搜索树(二叉查找树、二叉排序树):(来自百度百科)它或者是一棵空树,或者是具有下列性质的二叉树:① 若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;② 若它的右子树不为空,则右子数上所有结点的值均大于它的根节点的值;③ 它的左、右子树也分别为二叉排序树。二叉搜索树是一种经典的数据结构,既有链表的快速插入与删除操作的特点,又有数组快速查找的优势。二叉搜索树的操作主要有:查找:递归查找是否存在key插入:原树中不存在key,插入key返回true,否则返回原创 2021-01-30 16:13:32 · 202 阅读 · 0 评论 -
LeetCode125——验证回文串
我的解法(做题过程中又忘记了字符可以直接比较大小了):import java.util.ArrayList;import java.util.List;public class Test{ public static boolean isPalindrome(String s) { char[] cArray = s.toCharArray(); List list = new ArrayList<>(); for(int j=0;j<cArray.length;j+原创 2021-01-23 14:13:57 · 109 阅读 · 1 评论 -
LeetCode 231——2的幂
一、我开始的想法是: public boolean isPowerOfTwo(int n) { if(n<=0) return false; while(n%2==0) { n=n/2; } return n==1; }使用递归: public boolean isPowerOfTwo(int n) { if(n<=0) return false; if(n==1) return true; if(n%2==0) {原创 2021-01-21 10:29:46 · 79 阅读 · 0 评论 -
LeetCode——汇总区间
https://leetcode-cn.com/problems/summary-ranges/这道题很简单,但是对于数组的下标之类的不能很快理清楚,有时候越写越乱,注意!List<String> list = new ArrayList<String>(); int i=0; int n = nums.length; while(i<n) { int low = i; i++; while(i<n && nu原创 2021-01-21 10:02:39 · 64 阅读 · 0 评论 -
LeetCode 226——翻转二叉树
https://leetcode-cn.com/problems/invert-binary-tree/别人怎么这么聪明 public static TreeNode invertTree(TreeNode root) { if(root==null) return null; TreeNode left = invertTree(root.left); TreeNode right = invertTree(root.right); root.left = right; root.原创 2021-01-20 10:51:53 · 94 阅读 · 1 评论 -
LeetCode 225——用队列实现栈
java LinkedList链表(Linked List) 是一种常见的基础数据结构,是一种线性表。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{}public interface List<E> extends Collec原创 2021-01-20 10:11:25 · 116 阅读 · 1 评论 -
LeetCode217——存在重复元素
LeetCode 217——存在重复元素https://leetcode-cn.com/problems/contains-duplicate/submissions/给定一个整数数组,判断是否存在重复元素。1、Mapclass Solution { public boolean containsDuplicate(int[] nums) { Map map = new HashMap(); for(int i=0; i<nums.length; i++) { if(!m原创 2021-01-19 12:25:04 · 130 阅读 · 0 评论 -
LeeCode206——反转链表
https://leetcode-cn.com/problems/reverse-linked-list/submissions/1、双指针public static ListNode reverseList(ListNode head) { ListNode pre; ListNode cur; ListNode newHead = null; cur = head; pre = cur.next; while(pre != null) { cur.next = newH原创 2021-01-18 11:46:19 · 98 阅读 · 0 评论 -
LeetCode205——同构字符串
1、使用HashMap public static boolean isIsomorphic(String s, String t) { if(s.length() != t.length()) return false; //泛型必须是类类型,而不能是基本类型(包括基本类型的数组) HashMap<Character, Character> s_map = new HashMap<Character, Character>(); HashMap<Charac原创 2021-01-18 10:10:04 · 75 阅读 · 0 评论 -
LeetCode 204——计数质数
统计所有小于非负整数n的质数的数量1、暴力解法一class Solution { public int countPrimes(int n) { int count = 0; if(n==0) return 0; for(int i=2; i<n; i++) { int j = 0; for(j=2;j<i;j++) { if(i%j==0) break; } if(j原创 2021-01-17 21:27:18 · 76 阅读 · 1 评论 -
Leetcode202——快乐数
https://leetcode-cn.com/problems/happy-number/solution/kuai-le-shu-by-leetcode-solution/判断一个数是否为快乐数输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1 public static boolean isHappy(int n) {// Set<Integer> seen = new原创 2021-01-14 10:31:17 · 96 阅读 · 0 评论 -
leetcode190——颠倒二进制位(移位符)
java程序中 >>> 是右移移位运算符,表示无符号右移a>>>b,a表示操作数,b表示要移动的位数,右移后左边空出的位使用零来填充,移除右边的位被丢弃。无符号:仅包含非负值,即0到255; 有符号:由负值和正值组成,但格式不同,例如关于8位数字系统中0 ~ 127,-1 ~ -128无符号的可以具有较大的正值,而不能为负值。unsigned使用前导位作为值的一部分,而signed版本使用最左边的位来标识数字是正数还是负数。移动的位数超过了该类型的最大位数,如果.原创 2021-01-12 16:32:50 · 179 阅读 · 2 评论 -
leecode169——多数元素
https://leetcode-cn.com/problems/majority-element/大神解法:public static int majorityElement(int[] nums) { int count = 1; int num = nums[0]; for(int i=1; i<nums.length; ++i) { if(nums[i]==num) count++; else if(count==0) num=nums[i]; else co原创 2021-01-09 16:27:40 · 133 阅读 · 0 评论 -
LeetCode168——Excel Sheet Column Title
https://leetcode.wang/leetcode-168-Excel-Sheet-Column-Title.html将10进制转化为26进制表示大神解法:(他们真是太聪明了)public static String convertToTitle(int n) { StringBuilder sb = new StringBuilder(); while(n>0) { int c = n % 26; if(c==0) { c=26; n-=1;原创 2021-01-09 15:52:37 · 103 阅读 · 0 评论 -
leetcode160——相交链表
https://leetcode-cn.com/problems/intersection-of-two-linked-lists/从LeetCode上搜一下,这是一道很浪漫的题目哈哈原理:a+c+b+c=b+c+a+c所以重复部分就可以找到了/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int原创 2021-01-06 16:36:38 · 85 阅读 · 0 评论 -
LeetCode155——最小栈
1、栈中第一个为当前元素为栈顶时栈中的最小数据,第二个为当前入栈元素(这个思路太妙了)import java.util.Stack;//栈中第一个为当前元素为栈顶时栈中的最小数据,第二个为当前入栈元素 by leetcode 用户 Hxleepublic class Test{ Stack<Integer> stack; public Test() { stack = new Stack<Integer>(); } public void push原创 2021-01-06 10:25:20 · 80 阅读 · 1 评论 -
LeetCode141——环形链表
https://leetcode-cn.com/problems/linked-list-cycle/submissions/使用集合public class Solution { public static boolean hasCycle(ListNode head) { Set<ListNode> seen = new HashSet<ListNode>(); while (head != null) { //如果Set集合中不原创 2021-01-06 09:21:30 · 63 阅读 · 0 评论 -
LeetCode 13——只出现一次的数字
https://leetcode-cn.com/problems/single-number/1、使用HashMappublic int singleNumber(int[] nums) { HashMap hashMap = new HashMap(); for(int x:nums) { hashMap.put(x, (int)hashMap.getOrDefault(x, 0) + 1); } for(int y:(Set<Integer>)hashM原创 2021-01-05 19:39:50 · 99 阅读 · 0 评论 -
leetcode118——杨辉三角
https://leetcode-cn.com/problems/pascals-triangle/看了题解之后。发现是最朴素的解法class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> ret = new ArrayList<List<Integer>>(); for(int i=0; i&l原创 2021-01-04 09:36:13 · 97 阅读 · 0 评论 -
LeetCode112——路径总和
https://leetcode-cn.com/problems/path-sum/comments/思路来自:用户mikiyashiki public static boolean hasPathSum(TreeNode root, int sum) { if(root==null) return false; if(root.val==sum && root.left==null && root.right==null) return true; r原创 2020-12-31 11:48:13 · 77 阅读 · 0 评论