
leetcode
RomanBesson
这个作者很懒,什么都没留下…
展开
-
【刷刷刷,爽!】leetcode198. 打家劫舍
他后面没有数字了,很容易就会想到两种情况,“我要达成最优解,带还是不带这个数字呢?这是一道非常非常标准的初级动规题。属于走楼梯的进阶版。所以我们尝试把他变成走楼梯。或者说是怎么看成走楼梯。此时,答案的后门就敞开了。然后,具体体现形式有三种,原创 2024-02-17 12:02:06 · 514 阅读 · 0 评论 -
LeetCode-160. 相交链表
于是有一个巧妙的思路诞生了,如果让短的先走完自己的再走长的,长的走完走短的,他俩就会正好对齐。如果让他们尾端队齐,那么从后面遍历就会很快找到第一个相交的点。原创 2023-08-29 12:42:24 · 956 阅读 · 0 评论 -
代码随想录刷题--(链表篇)19. 删除链表的倒数第 N 个结点 ---快慢指针法
题目链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/代码随想录链接:https://programmercarl.com/0019.删除链表的倒数第N个节点.html#思路/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode.原创 2022-05-05 10:34:38 · 1065 阅读 · 0 评论 -
24. 两两交换链表中的节点 ----链表再学习
https://leetcode-cn.com/problems/swap-nodes-in-pairs/思路如下图: 蓝绿色箭头代表我们要构建的指向,红色箭头代表原来的指向。代码如下:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { thi.原创 2022-05-04 10:20:58 · 483 阅读 · 0 评论 -
双指针法 | |递归解决反转链表
https://leetcode-cn.com/problems/reverse-linked-list/代码随想录的思路,这里只用于记录自己的练习过程。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * .原创 2022-05-02 10:34:36 · 663 阅读 · 0 评论 -
虚节点解法(有点像快慢指针?)---203. 移除链表元素
/** * 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; } * }.原创 2022-05-01 11:05:21 · 688 阅读 · 0 评论 -
滑动窗口(一)--209. 长度最小的子数组
https://leetcode-cn.com/problems/minimum-size-subarray-sum/暴力解法:class Solution { /*暴力解法 */ public int minSubArrayLen(int target, int[] nums) { int sum = 0; int result = Integer.MAX_VALUE; int tempResult = 0; fo.原创 2022-04-26 10:28:44 · 119 阅读 · 0 评论 -
双指针简化双for循环系列(二)---26. 删除有序数组中的重复项
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/第一次提交:class Solution { public int removeDuplicates(int[] nums) { int slow = 0; int fast = 1; Boolean bool = false; for (; fast < nums.length; fast++) { .原创 2022-04-23 11:13:05 · 225 阅读 · 0 评论 -
双指针简化双for循环系列(一)27.移除元素
https://leetcode-cn.com/problems/remove-element/class Solution { public int removeElement(int[] nums, int val) { // 快慢指针 int fastIndex = 0; int slowIndex; for (slowIndex = 0; fastIndex < nums.length; fastI.原创 2022-04-22 10:47:11 · 377 阅读 · 0 评论 -
两数相加—思路和心得
原创 2022-04-08 12:27:03 · 151 阅读 · 0 评论 -
动态规划学习(二)
动态规划学习(二)删除并获得点数–打家劫舍的进阶版[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xln2uVCL-1649130998400)(./_image/2022-04-05/IMG_0145.jpg)]class Solution { public int deleteAndEarn(int[] nums) { //设置一个数量数组sum[],再设置一个价值数组var[] //(数量数组为了统计数组中个元素的个数,而价值数组则是 各原创 2022-04-05 11:57:10 · 190 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置—心得和解法
原创 2022-04-04 11:40:25 · 157 阅读 · 0 评论 -
动态规划学习(一)
:2 种三个数开始想:6 种答案就是:n(n-1)种求解动态规划的题目,大体分为四步:- 设置初始值- 设计状态转换方程- 根据状态转换方程为数组赋值- 返回结果我们来用几道典型题来理解一下:1. 斐波那契数列--属于是我们的老朋友了。```javaclass Solution { public int fib(int n) { //设置初始值 初始数组 int[] fn=new原创 2022-04-03 11:34:59 · 173 阅读 · 0 评论 -
剑指 Offer II 012. 左右两边子数组的和相等—心得与分享
class Solution { public int pivotIndex(int[] nums) { int sum=0,cur=0; //求和 for(int i:nums) sum+=i; for(int i=0;i<nums.length;i++){ sum-=nums[i]; //相等说明已经是中心下标原创 2022-04-01 11:04:19 · 136 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组—-解题思路和心得分享
原创 2022-03-31 10:44:48 · 141 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n----思路和心得分享
对于这道题,我第一个反应就是高斯的算法,首位相加乘以一半的数量(奇数要加中间值)class Solution { public int sumNums(int n) { //求出中间值 int key=n/2; //设置结果 int sum = 0; //如果是奇数,加上中位数 boolean flag = (n%2)>0 && (sum+=key+1)>0; .原创 2022-03-30 17:10:24 · 236 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数—一道字符串比较的问题
class Solution { public String minNumber(int[] nums) { List<String> list = new ArrayList<>(); for (int num : nums) { list.add(String.valueOf(num)); } list.sort((o1, o2) -> (o1 + o2).compareTo(o原创 2022-03-29 11:02:15 · 154 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表—-思路和心得分享
class Solution { //思路:首先清楚一点,中序遍历二叉搜索数得到的节点就是从小到大排序 //head代表头节点,它的left最终是要指向末尾来构成循环链表的,而head本身指向第一个节点 //pre始终指向当前节点 Node pre, head; public Node treeToDoublyList(Node root) { //判断当前节点是否为空 if(root == null) return null;原创 2022-03-25 11:03:08 · 380 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径—思路和心得分享
原创 2022-03-25 10:03:22 · 371 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列—思路和心得
思路来自于:【LeetCode力扣刷题 | 剑指Offer 31. 栈的压入、弹出序列-哔哩哔哩】 https://b23.tv/mvsIvAiimport java.util.Stack;class Solution { //思路:模拟一个栈进行相应的弹出操作 public boolean validateStackSequences(int[] pushed, int[] popped) { //空的情况 if(pushed.length==0)return tru.原创 2022-03-22 12:21:31 · 143 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子(343. 整数拆分)&& 剑指 Offer 14- II. 剪绳子 II —思路和心得
原创 2022-03-21 10:59:08 · 853 阅读 · 0 评论 -
剑指 Offer 65. 不用加减乘除做加法—思路和心得
原理不仔细梳理了,记下来吧。位运算请看这篇文章链接: 位运算学习,以及几道题居中的图片:class Solution { public int add(int a, int b) { if (a == 0) return b; int base = a ^ b; int up = a & b; return add(up << 1, base); }}...原创 2022-03-19 11:50:24 · 274 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列 -—思路和心得
这是一道典型的滑动窗口题目,解题思路就是对于小于target的每一个数都创建一个滑动窗口,通过窗口滑动来进行判断。我的题解:原创 2022-03-19 11:14:34 · 149 阅读 · 0 评论 -
剑指 Offer 62. 圆圈中最后剩下的数字 --思路和心得
以下思考借鉴了该题的评论区,以及b站的讲解视频,做出分享。这道题,是一道典型的约瑟夫问题。对于约瑟夫问题,我们第一个思路,就是唤醒链表。创建一个node节点,然后从头开始指针遍历。但是,如果按照这个思路发展的话,我们会惊讶的发现,超时了。。因为当n很大的时候,我们需要不断地从链表头遍历到链表尾,效率极低。。。我们需要对此进行改进。为此我们可以使用jdk提供的ArrayList如下:class Solution { /* 思路: 1.创建一个链表或者数组 2..原创 2022-03-17 10:36:39 · 660 阅读 · 0 评论 -
剑指 Offer 61. 扑克牌中的顺子 --思路和心得
class Solution { /* 思路:用一个参数special来代表相差的值 就比如 1 2 5 2和5相差两个数字,就将 special-=2; (在进行此步运算的时候要时刻注意让当前数的前一个数不为0) 如果遇到一个零,就让special++ 最后如果special不是负数 ,返回true 但要注意两个情况:1.重复的数字直接返回false 2..原创 2022-03-16 11:48:52 · 153 阅读 · 0 评论 -
剑指 Offer 55 - II. 平衡二叉树-- 心得和思路
/** * 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) { //终止条件:1.原创 2022-03-14 12:34:26 · 690 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 --思路和心得
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { // 这个题的主要思路:看两节点的位置,分别为: // 1.q,p在不同的子树 // 2.q,p在.原创 2022-03-14 11:43:40 · 148 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方 --思路和心得
答案来自于评论区的大佬:class Solution { public double myPow(double x, int n) { double res = 1.0; for(int i = n; i != 0; i /= 2){ if(i % 2 != 0){ res *= x; } x *= x; } return n.原创 2022-03-13 16:57:24 · 318 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度 --思路和心得
这题大体思路就是通过遍历或者递归来解决。评论区大佬的递归:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int maxDepth(TreeNode.原创 2022-03-13 16:40:33 · 202 阅读 · 0 评论 -
剑指 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 { /* .原创 2022-03-13 16:17:34 · 440 阅读 · 0 评论 -
剑指Offer-40-最小的k个数--topk问题java解法整理
解法一:排序+取前k个数class Solution { public int[] getLeastNumbers(int[] arr, int k) { int[] res=new int[k]; //排序 Arrays.sort(arr); for(int i=0;i<k;i++){ res[i]=arr[i]; } return res; }}解法二:优先队列大顶堆解法class Solution {.原创 2022-03-12 19:02:43 · 1244 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字--java解法和心得
class Solution { public int majorityElement(int[] nums) { //给数组排序 Arrays.sort(nums); //排序后所找的元素比在中间 return nums[nums.length/2]; }}原创 2022-03-12 15:34:12 · 788 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int div=1; int num=0; for(int i=0;i<32;i++) { //当指针和当前数字的二进制位数相同时,计数增加 if((div & n)!=0) nu.原创 2022-03-10 15:18:19 · 132 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树 --java语言--思路和心得
我们先来看一下原题:解题思路:要想求出这道题的解,重建一个二叉树,我们要求出以下几点:根节点的值左右子树这是一个大体思路。要想求出根节点,我们要知道一个知识点。前序数组的第一个元素就是根节点的值然后问题就十分简单了。class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { //求出根节点 TreeNode root=new TreeNode(原创 2022-03-09 17:07:57 · 541 阅读 · 0 评论 -
剑指 Offer II 033. 变位词组&剑指 Offer II 035. 最小时间差 -做题总结和心得(剑指offer进阶-哈希表部分)
剑指 Offer II 033. 变位词组该题解法是hash+sort,答案是评论区大佬写的。/*大体思路:创建一个哈希表 再将每个字符串变成字符数组 排序后若哈希表里不存在排序后的字符串,则创建索引,然后将原字符串放进对应索引的数组里 */class Solution { public List<List<String>> groupAnagrams(String[] strs) { //创建一个哈希表 Map<St原创 2022-02-13 11:17:27 · 1660 阅读 · 0 评论 -
“只出现一次的数字”系列 剑指offer--位运算学习(一)
最近学了下位运算,简单说说收获吧。首先我们要了解下常见的位运算操作:与或非操作异或操作进阶规律:与或非 和 异或都是满足结合律的。//重点a&b&c=ab(b|c)a^a=0a^(~a)=10^b=b我们先来看看第一道题:做这道题需要一个重要的知识点:a^b^a=a^a^b=0^b=b也就是说一堆数一起异或,最后剩下的应该是非偶数重复数的异或和。上面的问题重复的数都是偶数,就一个不重复的数。我们将它异或,结果就是我们要的数。代码如下:c原创 2022-02-05 19:53:47 · 1710 阅读 · 0 评论 -
遇到的有关的二进制的题目整理
前n个数字二进制中1的个数:解答来自评论区大佬:如果正整数 i 是一个偶数,那么 i 相当于将 i/2 左移一位的结果,因此偶数 i 和 i/2 的二进制形式 1 的个数是一样的 如果 i 是奇数,那么 i 相当于将 i/2 左移一位之后再将最右边的位设为 1 的结果,因此奇数 i 比 i/2 的二进制形式 1 的个数多 1 个 可以利用这个规律有如下代码class Solution { public int[] countBits(int n) { int[] res =原创 2022-01-27 09:59:23 · 1659 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序--学到点小知识
class Solution {public String reverseWords(String s) { String[] strings = s.trim().split(" "); StringBuilder sb=new StringBuilder(); for(int i=strings.length-1;i>=0;i--){ if (strings[i].equals("").原创 2022-01-22 17:28:12 · 1629 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围&剑指 Offer 12. 矩阵中的路径---dfs题目的应对策略
列举剑指 Offer有关dfs的两道初级题目,来谈谈这种题的自己的心得。剑指 Offer 13. 机器人的运动范围class Solution { public int movingCount(int m, int n, int k) { boolean[][] b=new boolean[m][n]; return dfs(b,0,0,k); } public int dfs(boolean[][] b,int i,int j,int k){原创 2022-01-22 17:01:44 · 1746 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I--二分法
一道典型的二分法题目。class Solution { public int search(int[] nums, int target) { int left =0,right = nums.length-1; int count = 0; while(left<right){ int mid = (left+right)/2; if(nums[mid]>=target) .原创 2022-01-21 17:57:33 · 1683 阅读 · 0 评论