
LeetCode刷题笔记
Sivan_Xin
Hi,终于等到你。爱好:Coding&Debug。博客内容:后端方向。喜欢和优秀的人做有挑战的事!
展开
-
动态规划中的股票问题全解析
3、 dp数组初始化:dp[0][0]为第0天持有股票,dp[0][0] -= prices[i]。dp[0][1]表示第0天不持有股票,dp[0][1] = 0。一定是选最大的,所以 dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]);dp[i][j]中i表示第i天,j为[0 - 4]五个状态,dp[i][j]为第i天状态j所剩的最大现金。■ 操作一:第i天买入股票了,那么dp[i][1] = dp[i-1][0] - prices[i]原创 2024-04-28 11:32:33 · 1041 阅读 · 0 评论 -
【LeetCode】 单调队列结构解决滑动窗口问题
单调队列结构解决滑动窗口问题单调队列这个数据结构主要可以解决滑动窗口相关的问题。LeetCode 239使用单调队列,由于单调队列的特点先进先出,对头尾进行操作,所以单调队列内部使用双链表LinkedList实现头尾的增减。class Solution { public int[] maxSlidingWindow(int[] nums, int k) { //利用单调队列的先进先出特点。 MonotonicQueue window = new Monot原创 2022-05-28 12:26:28 · 174 阅读 · 0 评论 -
【LeetCode】差分
小而精的算法—差分什么是差分数组?nums为原数组,那么差分数组就是遵循diff[i]=nums[i]-nums[i-1]的一个数组。如果要将差分数组转换成原数组,则需要ret[i]=ret[i-1]+nums[i]使用差分数组的好处?如果修改原数组left到right的值,不需要遍历只是将 diff[left]-=data 且 diff[rght+1]+=data即可。代码实现:public class Demo { //原数组 private static final原创 2022-05-27 14:09:22 · 819 阅读 · 1 评论 -
【LeetCode】前缀和
接下来的时间里,Sivan带着大家一起学习数据结构与算法哟!前缀和下面几道题就是典型的前缀和问题,在读题目之前,要先了解这些知识:什么是前缀和?就是将nums数组下标 0—i-1 的和(nums数组的前i个元素),放入preSum数组中,数组索引为i。一般,我们会让preSum[0]=0,表示nums数组的前0个元素的前缀和为0。使用前缀和的好处?使用前缀和数组,可以轻松计算指定数组区间的和(数组不可变)。LeetCode 303这是一道典型的运用前缀和的题目。根据题目.原创 2022-05-26 07:28:52 · 828 阅读 · 2 评论 -
【LeetCode】tag—数组 228、汇总区间
228、汇总区间本题较易,想像两个指针i和j。类似于选择排序的思路。其中findex指如果后一个元素不是有序的,那么i指针步进的步数。 public List<String> summaryRanges(int[] nums) { boolean flag=false; int findex=1; ArrayList<String> arrayList=new ArrayList<>(); for原创 2022-04-07 21:27:36 · 331 阅读 · 0 评论 -
【LeetCode】tag—数组 119、121
119、杨辉三角II利用 ArrayList<ArrayList<Integer>> A = new ArrayList<>();创建一个二维数组。规律:在一行中,除了第一个数和最后一个数,第j个数等于上一行的第j个数加第j-1个数。class Solution { public List<Integer> getRow(int rowIndex) { ArrayList<ArrayList<I原创 2022-04-06 10:12:02 · 304 阅读 · 1 评论 -
【LeetCode】tag—二分查找 27、35
27. 移除元素class Solution { public int removeElement(int[] nums, int val) { int l=0; for(int i=0;i<nums.length;i++){ if(nums[i]==val){ l++; nums[i]=51; } } A原创 2022-04-05 21:26:33 · 235 阅读 · 0 评论 -
【LeetCode】tag—排序977、1005
977. 有序数组的平方较易,直接看代码即可:public int[] sortedSquares(int[] nums) { for(int i=0;i<nums.length;i++){ nums[i]=Math.abs(nums[i]); } Arrays.sort(nums); for(int i=0;i<nums.length;i++){ nums[i]=(int)Ma原创 2022-04-01 21:55:44 · 420 阅读 · 0 评论 -
【LeetCode】tag—快速排序 561.数组拆分
561.数组拆分思路:经数学证明,先将数组排序,之后每次隔一位取值即可。猜想: 假设数组的长度为2n,比较最后两个大的数,取不到最大的数,只可以取到第二大的数字。此时数组还剩2n-2个数,再将这些数进行排序,也是取不到最大的数,只可以取到第二大的数,逆推即可得出规律。代码实现:public int arrayPairSum(int[] nums) { Arrays.sort(nums); int sum=0; for(int i=0;i<原创 2022-03-31 21:55:37 · 306 阅读 · 1 评论 -
【LeetCode】tag—排序 88、506
经验:等有了大概的思路再去敲代码,一定要注意保证思路的正确。否则会浪费大量的时间修改代码,再重新寻找思路。88 合并两个有序数组以后有机会可以看一下其他解法,这里给出最简略的解法。class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int index2=0; for(int i=m;i<m+n;i++){ nums1.原创 2022-03-30 21:08:26 · 450 阅读 · 0 评论 -
【LeetCode】451. 根据字符出现频率排序
451. 根据字符出现频率排序必备知识点:HashMap的方法getOrDefault:当map中存在c(key)时,输出对应的value,如果不存在c(key)时,则输出0。遍历HashMap的方法。 for (Map.Entry<Character, Integer> entry : map.entrySet()) { char c = entry.getKey(); int frequency = entry.getValue();原创 2022-03-29 16:14:09 · 939 阅读 · 1 评论 -
【LeetCode】 349 两个数组的交集
文章目录LeetCode 349 两个数组的交集双指针+排序法1双指针 + 排序法2HashSet法LeetCode 349 两个数组的交集Arrays提供了一个copyOfRange方法进行数组复制。双指针+排序法1class Solution { public int[] intersection(int[] nums1, int[] nums2) { int minLength = 0; int maxLength = 0; int原创 2022-03-28 10:31:49 · 599 阅读 · 5 评论 -
【LeetCode】三道简单的排序题 242、217、169
文章目录必须掌握的知识点242 有效的字母异位词217 存在重复元素169 多数元素必须掌握的知识点Java中Arrays.sort的底层使用双轴快排进行排序。Java中String类存在方法toCharArray可以直接将String类型转换为char类型的数组。Java中Arrays.equals方法:如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则认为这两个数组相等。242 有效的字母异位词public boolean isAnagram(String s,原创 2022-03-27 21:47:24 · 1348 阅读 · 3 评论 -
【LeetCode】19.删除链表的倒数第 N 个结点
Java代码实现Day1明确正向删除链表的方法。倒数第n个结点与整数第num个结点地关系。class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { int length=0; ListNode temp=head; for(length=1;temp.next!=null;length++){ //获取链表的长度 temp=t原创 2022-02-26 12:33:00 · 268 阅读 · 0 评论