剑指Offer(第二版)
算法!
slow is fast.
总结积累
展开
-
剑指Offer(第二版): 41. 数据流中的中位数 44. 数字序列中某一位的数字(找规律题) 20. 表示数值的字符串 6. Z 字形变换
dsdasddsadsdasclass MedianFinder { Queue<Integer> A, B; /** initialize your data structure here. */ public MedianFinder() { A = new PriorityQueue<>(); B = new PriorityQueue<>((x,y)->(y-x)); }原创 2021-11-21 19:48:58 · 321 阅读 · 0 评论 -
剑指Offer(第二版):67. 把字符串转换成整数 59 - II. 队列的最大值 60. n个骰子的点数
/**解题思路:首先是弄清规则 ①、首先看首位是不是'+''-''数组',如果不是就直接返回0 ②、满足①后,就找后面连接的数字,如果后面紧跟的不是数组,也是返回0,如果后面得到的值大于或者小于int的最大值,则根据首位正负来返回值。 */class Solution { public int strToInt(String str) { //首先我们先去除前导和尾随的空格 String str1 = str.trim.原创 2021-11-21 15:30:49 · 255 阅读 · 0 评论 -
剑指Offer(第二版):43. 1~n 整数中 1 出现的次数 19. 正则表达式匹配
sdassddsdsssdsas/**解题思路:找规律的题,首先我们要找每一位出现1的个数,然后考虑每一位'0'~'9'不同时,分别对应的1的个数的计算公式,然后遍历所有位,这道题可以看题解,讲解的很好。我们令当前位为cur,然后低于他的位为low,高于他的位为high,dight为cur对应的10^cur 当cur==0, 1的个数为 high*dight 当cur==1, 1的个数为high*dight+low+1 当cur=2~9,1的个数为(high+1)*di原创 2021-11-19 22:18:55 · 586 阅读 · 0 评论 -
剑指Offer(第二版):49. 丑数 (动态规划) 14- II(I). 剪绳子 II(贪心算法) 33. 二叉搜索树的后序遍历序列(后序遍历的使用、递归)
dsasddsasddssdsdas/**解题思路:咋说呢?这种题就是看解析,首先动态规划,dp[n]代表第n+1个丑数 具体怎么想,看别人总结,已放到CSDN */class Solution { public int nthUglyNumber(int n) { int[] dp = new int[n]; //边界值 dp[0] =1; //三个指针指向0,分别对应着前一个丑数的下标原创 2021-11-18 08:42:48 · 403 阅读 · 0 评论 -
剑指Offer(第二版):51. 数组中的逆序对(归并排序) 45. 把数组排成最小的数(快速排序思想)
/**解题思路1:暴力搜素,但是会超时间 */// class Solution {// public int reversePairs(int[] nums) {// //边界条件// int len = nums.length;// if(len == 0)// return 0;// //考虑动态规划// int[] dp = new int[len];// .原创 2021-11-17 12:35:22 · 299 阅读 · 0 评论 -
剑指Offer(第二版):59 - I. 滑动窗口的最大值 37. 序列化二叉树
dsadadsss/**解题思路: 1、遍历给定数组中的元素,如果队列不为空且当前考察元素大于等于队尾元素,则将队尾元素移除。直到,队列为空或当前考察元素小于新的队尾元素; 2、当队首元素的下标小于滑动窗口左侧边界left时,表示队首元素已经不再滑动窗口内,因此将其从队首移除。 3、由于数组下标从0开始,因此当窗口右边界right+1大于等于窗口大小k时,意味着窗口形成。此时,队首元素就是该窗口内的最大值。 重点:单调队列!! queue是用来做什么的,存储“最大值的原创 2021-11-16 14:37:08 · 703 阅读 · 0 评论 -
剑指Offer(第二版): 35. 复杂链表的复制 47. 礼物的最大价值 56 - II. 数组中数字出现的次数 II 16. 数值的整数次方
/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; }}*//**解题思想1:哈希表思想,用哈希表来存储一个映射,原节点----->拷贝节点 */cl.原创 2021-11-15 08:55:17 · 620 阅读 · 0 评论 -
剑指Offer(第二版): 31. 栈的压入、弹出序列 66. 构建乘积数组 64. 求1+2+…+n 32 - III. 从上到下打印二叉树 III
/**解题思路:其实就是栈的模拟过程 */class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { //模拟栈 Stack<Integer> stack = new Stack<>(); //遍历数组 int i=0; for(int x : pushed){ .原创 2021-11-14 15:03:40 · 908 阅读 · 2 评论 -
剑指Offer(第二版):34. 二叉树中和为某一值的路径 56 - I. 数组中数字出现的次数 63. 股票的最大利润 32 - I. 从上到下打印二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2021-11-14 14:19:00 · 620 阅读 · 0 评论 -
剑指Offer(第二版): 46. 把数字翻译成字符串(动态规划) 48. 最长不含重复字符的子字符串 26. 树的子结构 07. 重建二叉树 36. 二叉搜索树与双向链表
/**解题思路:动态规划 1、首先考虑转移方程 if xi + xi-1 不能组成一个数,则dp[i] = dp[i-1] if xi + xi-1 能责成一个数,则dp[i] = dp[i-1] + dp[i-2] 2、考虑边界方程 首先 dp[1] =1 , 而 dp[2] = 1+1 =2 ,则 反推可以知道 dp[0] = 1; 3、那怎么知道xi和xi-1能不能组成一个数呢,因为ASCII是 0~25,因此01,.原创 2021-11-11 23:42:51 · 608 阅读 · 0 评论 -
剑指Offer(第二版): 38. 字符串的排列 13. 机器人的运动范围 12. 矩阵中的路径
dddsdsasdas/** 感觉用回溯法比较好,但是要注意, */class Solution { //返回的字符串 Set<String> str_set = new HashSet<>(); public String[] permutation(String s) { //字符串长度 int len = s.length(); //然后通过数组标志每个字母用与不用原创 2021-11-11 11:59:26 · 342 阅读 · 0 评论 -
剑指Offer(第二版):55 - II. 平衡二叉树 54. 二叉搜索树的第k大节点 39. 数组中出现次数超过一半的数字 15.二进制中1的个数 28. 对称的二叉树 65. 不用加减乘除做加法
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isBalanced(TreeNode root) { if(root .原创 2021-11-10 15:38:10 · 4563 阅读 · 0 评论 -
剑指Offer(第二版): 61. 扑克牌中的顺子 32 - II. 从上到下打印二叉树 II 55 - I. 二叉树的深度 21. 调整数组顺序使奇数位于偶数前面 68 - II. 二叉树的最近公共
dasasd/**解题思路: 首先我们将数组排序,然后我们遍历数组,记录0的个数, 1如果相邻的两个差值 <=0的个数值,则true,如果>则返回false 2如果相邻的值相等,则一定不行 */class Solution { public boolean isStraight(int[] nums) { Arrays.sort(nums); int zeroCnt = 0 ; int d原创 2021-11-09 22:04:30 · 4092 阅读 · 0 评论 -
剑指Offer(第二版):30. 包含min函数的栈(链表) 57 - II. 和为s的连续正数序列(滑动窗口) 58 - I. 翻转单词顺序 53 - I. 在排序数组中查找数字 I
/**解题思路:首先我们想到栈是"先入后出",因此我们通过链表模拟栈时,后放入的节点反而做为链表头,这样我们做相关操作时只要链表头的节点就可以了,而对于取最小值,我们只需要再定义Node时多一个属性即可。 */class MinStack { private class Node { int val; int min; Node next; private Node(int val , int min , Node ne.原创 2021-11-09 00:09:28 · 461 阅读 · 0 评论 -
剑指Offer(第二版):50. 第一个只出现一次的字符 57. 和为s的两个数字 52. 两个链表的第一个公共节点 18. 删除链表的节点
dasdasdas//最麻烦的双层遍class Solution { public char firstUniqChar(String s) { int[] target = new int[26]; for(int i=0 ; i<s.length() ; i++){ target[s.charAt(i) - 'a']++; } for(int i=0 ; i<s.length()原创 2021-11-07 09:47:10 · 158 阅读 · 0 评论 -
剑指Offer(第二版):27. 二叉树的镜像 53 - II. 0~n-1中缺失的数字
dsadas/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ //dfsclass Solution { public TreeNode mirrorTree(TreeNode root) {原创 2021-11-06 08:49:32 · 166 阅读 · 0 评论 -
剑指Offer(第二版):58 - II. 左旋转字符串 06. 从尾到头打印链表 40. 最小的k个数 05. 替换空格 25. 合并两个排序的链表 17. 打印从1到最大的n位数
dsadsd//第一种:substringclass Solution { public String reverseLeftWords(String s, int n) { return s.substring(n,s.length())+s.substring(0,n); }}//第二种:StringBuilderclass Solution { public String reverseLeftWords(String s, int n)原创 2021-11-05 22:58:22 · 182 阅读 · 0 评论 -
剑指Offer(第二版):24. 反转链表(迭代,递归) 42. 连续子数组的最大和 (动态规划) 22. 链表中倒数第k个节点(双指针) 29. 顺时针打印矩阵 62. 圆圈中最后剩下的数字
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ //迭代class Solution { public ListNode reverseList(ListNode head) { ListNode pre = null , c.原创 2021-11-05 09:49:19 · 148 阅读 · 0 评论 -
剑指Offer(第二版): 09. 用两个栈实现队列 03. 数组中重复的数字 1. 斐波那契数列 04. 二维数组中的查找 10- II. 青蛙跳台阶问题 11. 旋转数组的最小数字
dasdasadclass CQueue { Deque<Integer> stack1; Deque<Integer> stack2; public CQueue() { stack1 = new LinkedList<>(); stack2 = new LinkedList<>(); } public void appendTail(int value) {原创 2021-11-04 08:03:43 · 215 阅读 · 0 评论