
力扣
rookieyx
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列class Solution { Set<String> set=new HashSet<>(); public String[] permutation(String s) { StringBuilder sb=new StringBuilder(); boolean[] used=new boolean[s.length()]; backtracking(s,"",used)原创 2022-02-03 16:10:21 · 180 阅读 · 0 评论 -
剑指 Offer 59 - II. 队列的最大值
class MaxQueue { //使用双向队列原因:维护递减列表需要元素队首弹出、队尾插入、队尾弹出操作皆为 O(1) 时间复杂度。 Queue<Integer> queue; Deque<Integer> queue2; public MaxQueue() { queue=new LinkedList<>(); queue2=new LinkedList<>(); }原创 2022-02-02 17:08:38 · 83 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列 剑指 Offer 62. 圆圈中最后剩下的数字 剑指 Offer 14- I. 剪绳子
剑指 Offer 57 - II. 和为s的连续正数序列class Solution { public int[][] findContinuousSequence(int target){ //返回格式出错 // List<List<Integer>> res=new ArrayList<>(); List<int[]> res=new ArrayList<>(); //滑动原创 2022-02-01 20:57:18 · 303 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字 剑指 Offer 66. 构建乘积数组
剑指 Offer 39. 数组中出现次数超过一半的数字class Solution { public int majorityElement(int[] nums) { if(nums.length==1) return nums[0]; Arrays.sort(nums); int n=nums.length; int res=nums[0]; // 2 3 3 for(int i=0;i<=n原创 2022-01-29 16:48:23 · 452 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数 剑指 Offer 56 - II. 数组中数字出现的次数 II
剑指 Offer 56 - I. 数组中数字出现的次数方法一:纯纯为了正确,此做法不符合题目的要求class Solution { public int[] singleNumbers(int[] nums) { Set<Integer> set=new HashSet<>(); for(int i=0;i<nums.length;i++){ if(set.contains(nums[i])){原创 2022-01-28 17:41:18 · 309 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树 剑指 Offer 15. 二进制中1的个数 剑指 Offer 65. 不用加减乘除做加法
剑指 Offer 07. 重建二叉树/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { HashMap<Integer,Integer> map=new H原创 2022-01-27 17:01:15 · 274 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
剑指 Offer 68 - II. 二叉树的最近公共祖先做题思路·:终止条件:当越过叶节点,则直接返回 null ;当 rootroot 等于 p, q ,则直接返回 root ;递推工作:开启递归左子节点,返回值记为 left;开启递归右子节点,返回值记为 right ;返回值: 根据 left 和 right,可展开为四种情况;当 left 和 right 同时为空 :说明 root 的左 / 右子树中都不包含 p,q ,返回 null ;当 left 和 right 同时不为空原创 2022-01-26 18:39:45 · 163 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数 剑指 Offer 55 - I. 二叉树的深度 剑指 Offer 55 - II. 平衡二叉树 剑指 Offer 64. 求1+2+…+n
剑指 Offer 41. 数据流中的中位数方法一:借用list集合来解决问题class MedianFinder { List<Integer> res; /** initialize your data structure here. */ public MedianFinder() { res=new ArrayList<>(); } public void addNum(int num)原创 2022-01-25 17:04:41 · 210 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数
剑指 Offer 45. 把数组排成最小的数class Solution { public String minNumber(int[] nums) { String[] str=new String[nums.length]; for(int i=0;i<nums.length;i++) str[i]=String.valueOf(nums[i]); Arrays.sort(str,new Comparator<Str原创 2022-01-24 18:48:30 · 80 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { int count=0; int i=0; int r原创 2022-01-23 19:15:25 · 239 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围 剑指 Offer 34. 二叉树中和为某一值的路径 剑指 Offer 36. 二叉搜索树与双向链表
剑指 Offer 13. 机器人的运动范围class Solution { //利用used数组来确保dfs过程中方格已经判断过 boolean[][] used; public int movingCount(int m, int n, int k) { //此题自己做时,和矩阵中的路径搞混了的一点是没有分析出此题不需要进行回溯撤销操作 used=new boolean[m][n]; return dfs(0,0,m,n,k);原创 2022-01-23 18:02:52 · 239 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序 剑指 Offer 12. 矩阵中的路径
#剑指 Offer 58 - I. 翻转单词顺序class Solution { public String reverseWords(String s) { //s.trim(); String t=s.trim(); //s.split(" ") 只能去除一个空格 //s.split("\\s+") 去除一个或多个空格 String[] str=t.split("\\s+"); String re原创 2022-01-22 18:29:02 · 410 阅读 · 0 评论 -
剑指 Offer 52. 两个链表的第一个公共节点 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 剑指 Offer 57. 和为s的两个数字
剑指 Offer 52. 两个链表的第一个公共节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public L原创 2022-01-22 16:54:10 · 185 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值 剑指 Offer 46. 把数字翻译成字符串 剑指 Offer 22. 链表中倒数第k个节点 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 47. 礼物的最大价值class Solution { public int maxValue(int[][] grid) { int n=grid.length; int m=grid[0].length; int[][] dp=new int[n][m]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ i原创 2022-01-21 18:42:01 · 288 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和 剑指 Offer 48. 最长不含重复字符的子字符串 剑指 Offer 18. 删除链表的节点
剑指 Offer 42. 连续子数组的最大和class Solution { public int maxSubArray(int[] nums) { if(nums.length<1) return 0; int res=nums[0]; int max=nums[0]; for(int i=1;i<nums.length;i++){ res=Math.max(res+nums[i],nums[i原创 2022-01-20 18:06:14 · 194 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构 剑指 Offer 10- I. 斐波那契数列 剑指 Offer 10- II. 青蛙跳台阶问题 剑指 Offer 63. 股票的最大利润
剑指 Offer 26. 树的子结构/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSubStructure(TreeNode A,原创 2022-01-20 16:47:52 · 311 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III 剑指 Offer 28. 对称的二叉树 剑指 Offer 27. 二叉树的镜像
剑指 Offer 32 - III. 从上到下打印二叉树 III/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public List<List<Inte原创 2022-01-19 18:20:42 · 170 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字 面试题32 - I. 从上到下打印二叉树 剑指 Offer 32 - II. 从上到下打印二叉树 II
剑指 Offer 11. 旋转数组的最小数字class Solution { public int minArray(int[] numbers) { //面试-->二分思路 //注意:将中点值和最右边的边界进行比较,因为这样才能判断出中点值是在左边排序数组还是右边排序数组 //目的:找到右边排序数组的第一个值 int i=0; int j=numbers.length-1; while(i<原创 2022-01-19 16:49:27 · 278 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { //思路:依次对每行进行二分查找 //注意对特殊情况矩阵的判断,即二维数组为空或二维数组只有一行时。 if(matrix.length==0 || matrix[0].length<1) return false;原创 2022-01-17 18:42:29 · 135 阅读 · 0 评论 -
剑指 Offer 05. 替换空格 剑指 Offer 58 - II. 左旋转字符串 剑指 Offer 53 - II. 0~n-1中缺失的数字
剑指 Offer 05. 替换空格class Solution { public String replaceSpace(String s) { StringBuilder res=new StringBuilder(); for(int i=0;i<s.length();i++){ if(s.charAt(i)==' '){ res.append("%20"); }else{原创 2022-01-16 21:22:57 · 96 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈 剑指 Offer 35. 复杂链表的复制
剑指 Offer 30. 包含min函数的栈class MinStack { Stack<Integer> stack; /** initialize your data structure here. */ public MinStack() { stack=new Stack<>(); } public void push(int x) { stack.push(x); }原创 2022-01-15 21:54:37 · 121 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I --->面试考点
剑指 Offer 53 - I. 在排序数组中查找数字 I主思想:二分查找算法方法一:找到目标值的左右边界,相减即可得到出现次数class Solution { //方法一:思路: //找到目标值的左右边界,相减即可得到出现次数 public int search(int[] nums, int target) { // 3 5 8 8 8 10 11 int l=0; int r=nums.length-1;原创 2022-01-15 20:10:35 · 106 阅读 · 0 评论 -
2022-1-11 剑指 Offer 50. 第一个只出现一次的字符 剑指 Offer 53 - I. 在排序数组中查找数字 I
剑指 Offer 50. 第一个只出现一次的字符方法一:哈希表class Solution { public char firstUniqChar(String s) { HashMap<Character,Integer> map=new HashMap<>(); for(int i=0;i<s.length();i++){ char c=s.charAt(i); map.put(c,原创 2022-01-11 20:29:20 · 142 阅读 · 0 评论 -
2022-1-10 剑指 Offer 09. 用两个栈实现队列 剑指 Offer 06. 从尾到头打印链表 剑指 Offer 24. 反转链表
剑指 Offer 09. 用两个栈实现队列方法一:class CQueue { Stack<Integer> stack1=new Stack<>(); Stack<Integer> stack2=new Stack<>(); public CQueue() { } public void appendTail(int value) { stack1.push原创 2022-01-10 22:11:32 · 155 阅读 · 0 评论 -
2022-1-5 328. 奇偶链表 53. 最大子数组和 88. 合并两个有序数组 350. 两个数组的交集 II
328. 奇偶链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = nex原创 2022-01-05 17:25:02 · 418 阅读 · 0 评论 -
2022-1-3 1441. 用栈操作构建数组 445. 两数相加 II 2126. 摧毁小行星 2125. 银行中的激光束数量
1441. 用栈操作构建数组class Solution { public List<String> buildArray(int[] target, int n) { List<String> list=new ArrayList<>(); if(target.length==0) return list; int count=1; // for(int i=0;i<target.length原创 2022-01-03 12:09:10 · 167 阅读 · 0 评论 -
2022-1-2 1721. 交换链表中的节点 143. 重排链表
1721. 交换链表中的节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next原创 2022-01-02 21:16:09 · 280 阅读 · 0 评论 -
2022-1-1 82. 删除排序链表中的重复元素 II 86. 分隔链表 92. 反转链表 II 876. 链表的中间结点 217. 存在重复元素 剑指 Offer 03. 数组中重复的数字
82. 删除排序链表中的重复元素 II/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.原创 2022-01-01 11:07:36 · 136 阅读 · 0 评论 -
2021-12-31 61. 旋转链表 141. 环形链表 83. 删除排序链表中的重复元素
61. 旋转链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next原创 2021-12-31 21:23:23 · 221 阅读 · 0 评论 -
142. 环形链表 II 237. 删除链表中的节点 21. 合并两个有序链表 2. 两数相加
142. 环形链表 II/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode detectCycle(原创 2021-12-30 20:32:17 · 157 阅读 · 0 评论 -
2021-12-29 206. 反转链表 24. 两两交换链表中的节点 19. 删除链表的倒数第 N 个结点 160. 相交链表
206. 反转链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = nex原创 2021-12-29 20:45:04 · 170 阅读 · 0 评论 -
2021-12-27 46. 全排列 47. 全排列 II 51. N 皇后 203. 移除链表元素 707. 设计链表
46. 全排列class Solution { List<List<Integer>> res=new ArrayList<>(); List<Integer> path=new ArrayList<>(); public List<List<Integer>> permute(int[] nums){ int[] used=new int[nums.length];原创 2021-12-27 21:05:52 · 79 阅读 · 0 评论 -
2021-12-26 40. 组合总和 II 131. 分割回文串 78. 子集 90. 子集 II 491. 递增子序列
40. 组合总和 IIclass Solution { List<List<Integer>> res=new ArrayList<>(); List<Integer> path=new ArrayList<>(); public List<List<Integer>> combinationSum2(int[] candidates, int target) { //未理解这里的原创 2021-12-26 18:05:54 · 145 阅读 · 0 评论 -
2021-12-25 216. 组合总和 III 17. 电话号码的字母组合 39. 组合总和
216. 组合总和 IIIclass Solution { List<List<Integer>> list=new ArrayList<>(); List<Integer> path=new ArrayList<>(); public List<List<Integer>> combinationSum3(int k, int n) { backtrackin原创 2021-12-25 21:21:25 · 429 阅读 · 0 评论 -
2021-12-23 187. 重复的DNA序列 3. 无重复字符的最长子串 209. 长度最小的子数组 77. 组合
187. 重复的DNA序列class Solution { public List<String> findRepeatedDnaSequences(String s) { int n=s.length(); ArrayList<String> list=new ArrayList<>(); if(n<10) return list; HashMap<String,Integer>原创 2021-12-23 20:10:42 · 3151 阅读 · 0 评论 -
2021-12-22 349. 两个数组的交集 202. 快乐数 454. 四数相加 II 128. 最长连续序列
349. 两个数组的交集class Solution { public int[] intersection(int[] nums1, int[] nums2) { int n=nums1.length; int m=nums2.length; HashSet<Integer> set=new HashSet<>(); ArrayList<Integer> list=new ArrayList<原创 2021-12-22 20:01:58 · 535 阅读 · 0 评论 -
2021-12-20 64. 最小路径和 剑指 Offer II 095. 最长公共子序列
64. 最小路径和class Solution { public int minPathSum(int[][] grid) { int n=grid.length; int m=grid[0].length; int[][] dp=new int[n][m]; dp[0][0]=grid[0][0]; //思路:动态规划分为三种情况, for(int i=0;i<n;i++){原创 2021-12-20 21:12:29 · 87 阅读 · 0 评论 -
2021-12-19 152. 乘积最大子数组
152. 乘积最大子数组class Solution { public int maxProduct(int[] nums) { //最大值和最小值都需保留因为负数*负数有可能就成为了最大值。 int max1=1; int min1=1; int max=nums[0]; for(int i=0;i<nums.length;i++){ if(nums[i]<0){原创 2021-12-19 21:57:51 · 79 阅读 · 0 评论 -
2021-12-18 516. 最长回文子序列 647. 回文子串
516. 最长回文子序列class Solution { public int longestPalindromeSubseq(String s) { int n=s.length(); //dp[i][j]表示长度为i~j的字符串中最长回文子序列的长度 int[][] dp=new int[n][n]; for(int i=0;i<n;i++) dp[i][i]=1; //相等 dp[i][j]=dp[i+1原创 2021-12-18 22:29:39 · 86 阅读 · 0 评论 -
2021-12-17 583. 两个字符串的删除操作
583. 两个字符串的删除操作class Solution { public int minDistance(String word1, String word2) { int n=word1.length(); int m=word2.length(); int[][] dp=new int[n+1][m+1]; //此题注意初始化即可。 for(int i=0;i<n+1;i++) dp[i][0]=i;原创 2021-12-17 21:06:47 · 90 阅读 · 0 评论