04 2021 档案

摘要:1.反转链表 双指针法,先存cur.next,然后cur.next指向pre,接着往后移。 206. 反转链表 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; 阅读全文
posted @ 2021-04-30 22:04 星予 阅读(87) 评论(0) 推荐(0)
摘要:Synchronized锁升级过程 首先,每个对象都有一把锁。 对象的结构有三个部分:对象头,实例数据,对其填充字节(保证对象大小为8字节的倍数) 对象头由两部分组成:1.classpointer(指向当前对象在方法区中的类型数据) 2.Markword存储和当前对象运行时状态有关的数据 锁的信息就 阅读全文
posted @ 2021-04-27 19:28 星予 阅读(2088) 评论(0) 推荐(0)
摘要:不好返回的是时候,就用void,然后在主函数中返回。 思路是在快排中只增加了一句话: if(k == i) return;如果基准数的下标,和k相等,就return。 假如k=7,数组下标为7的时候是第 8个数,第8个数前的数都比第8个数小。 其实在像解答里在arr[i] = pivot;之后判断, 阅读全文
posted @ 2021-04-22 22:14 星予 阅读(92) 评论(0) 推荐(0)
摘要:思路很简单,首先输出res.next可以避免链表头结点是0的问题。 然后不能在第一个while循环结束后直接把剩下的链表接上来,因为可能存在进位,仍然需要一步一步递加。 最后一位也有可能产生进位,如果有进位直接new ListNode(1)即可。 面试题 02.05. 链表求和 /** * Defi 阅读全文
posted @ 2021-04-22 20:00 星予 阅读(71) 评论(0) 推荐(0)
摘要:1.状态定义 dp[i]表示组成面额 i,有多少种方案。 2.状态转移方程 int[] coins = new int[]{1,5,10,25}; for(int coin: coins) { dp[k] += dp[k - coin]; } 比如dp[36] = dp[36-1] + dp[36 阅读全文
posted @ 2021-04-22 19:45 星予 阅读(76) 评论(0) 推荐(0)
摘要:1.状态定义 dp[i]代表凑齐总价值 i 需要的最少硬币个数; 2.状态转移方程 for(int coin : coins) dp[i] = Math.min(dp[i], dp[i - coin] + 1); 322. 零钱兑换 class Solution { public int coinC 阅读全文
posted @ 2021-04-15 18:27 星予 阅读(64) 评论(0) 推荐(0)
摘要:应该不用写啥。 也可以用有序哈希表LinkedHashMap,第二遍遍历哈希表。 剑指 Offer 50. 第一个只出现一次的字符 class Solution { public char firstUniqChar(String s) { Map<Character, Boolean> dic = 阅读全文
posted @ 2021-04-14 22:05 星予 阅读(41) 评论(0) 推荐(0)
摘要:思路一: 利用小根堆。 小根堆弹出的数是堆里最小的,于是弹出一个x。 就将2*x,3*x,5*x加入set去重,然后重新加入小根堆。 弹出的第n个数就是第n个丑数。 class Solution { public int nthUglyNumber(int n) { int[] factors = 阅读全文
posted @ 2021-04-14 21:48 星予 阅读(71) 评论(0) 推荐(0)
摘要:charAt返回指定索引处的字符。 转为字符数组toCharArray() 剑指 Offer 48. 最长不含重复字符的子字符串 class Solution { public int lengthOfLongestSubstring(String s) { HashMap<Character, I 阅读全文
posted @ 2021-04-14 21:14 星予 阅读(56) 评论(0) 推荐(0)
摘要:dp三步走: 1.状态定义 dp[i]表示到第i位能形成的方案数量(从1开始) 2.状态转移方程 当第i-1位,i位组合起来能被翻译:dp[i] = dp[i - 1] + dp[i - 2] 不能被连起来翻译:dp[i] = dp[i - 1] //指加上了这一位,方案数量没有改变 3.边界处理 阅读全文
posted @ 2021-04-14 16:58 星予 阅读(53) 评论(0) 推荐(0)
摘要:length是数组的属性,单独String用.length(),数组的属性就用.length。 这道题也只是知道策略,不知道怎么证明。 剑指 Offer 45. 把数组排成最小的数 class Solution { public String minNumber(int[] nums) { //这里 阅读全文
posted @ 2021-04-14 16:03 星予 阅读(58) 评论(0) 推荐(0)
摘要:原文链接:https://blog.csdn.net/bytxl/article/details/40920165 hashmap为什么用红黑二叉树而不用B+树? hashMap的元素是动态修改的,红黑树修改元素,不用移动元素的位置,因为直接修改左右父指针的值就好了,但是B+树的同一个块内的元素,没 阅读全文
posted @ 2021-04-10 19:21 星予 阅读(521) 评论(0) 推荐(0)
摘要:reverseOrder() 方法用于获取一个比较有否就实现Comparable接口的对象的集合的自然顺序相反。 剑指 Offer 40. 最小的k个数 class Solution { public int[] getLeastNumbers(int[] arr, int k) { if(k == 阅读全文
posted @ 2021-04-02 16:30 星予 阅读(61) 评论(0) 推荐(0)
摘要:感觉是比较难的一道题了,写一下思路以及运行流程。 举例 s = "abc" 1.首先将字符串s存入字符数组便于操作,进入dfs(0) 2.进入循环,交换‘a’和‘a’(相当于没变),进入dfs(1) 3.进入循环,交换‘b’和‘b’,进入dfs(2) 4.触发终止条件,把此时的字符串c转为Strin 阅读全文
posted @ 2021-04-02 16:02 星予 阅读(61) 评论(0) 推荐(0)
摘要:思路:中序遍历依次修改左右连接。 剑指 Offer 36. 二叉搜索树与双向链表 /* // Definition for a Node. class Node { public int val; public Node left; public Node right; public Node() 阅读全文
posted @ 2021-04-02 14:02 星予 阅读(60) 评论(0) 推荐(0)
摘要:思路:用hashmap存储新老节点对应关系。 剑指 Offer 35. 复杂链表的复制 /* // Definition for a Node. class Node { int val; Node next; Node random; public Node(int val) { this.val 阅读全文
posted @ 2021-04-01 16:50 星予 阅读(56) 评论(0) 推荐(0)
摘要:思路:后序遍历则数组末尾为根节点。 二叉搜索树左子节点值 < 根节点值 <右子节点值 因子划分左右子树,递归判断。 剑指 Offer 33. 二叉搜索树的后序遍历序列 class Solution { public boolean verifyPostorder(int[] postorder) { 阅读全文
posted @ 2021-04-01 15:55 星予 阅读(60) 评论(0) 推荐(0)
摘要:思路一: 加了一句: if(res.size() % 2 == 1) Collections.reverse(tmp);如果res.size()为奇数,当前层为偶数,反转tmp之后再存入res。 class Solution { public List<List<Integer>> levelOrd 阅读全文
posted @ 2021-04-01 15:22 星予 阅读(64) 评论(0) 推荐(0)