
LeetCode
永远的烟火
我就是我,为绚丽绽放而厚积薄发的人间烟火
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Leetcode-209】长度最小的子数组
方法一、遍历元素,逐项寻找子数组 方法二、双指针法 i,j开始都指向0; j开始右移,若s(i,j)的和大于等于target,则减去arr[i],i右移,直至s(i,j)小于target; j继续右移,同样操作,直至最后; int minSubArrayLen(int s, int *nums, int numsSize) { if (numsSize == 0) { return 0; } int ans = INT_MAX; int start = 0原创 2020-06-28 20:13:25 · 171 阅读 · 0 评论 -
【Leetcode】连续子数组的最大和
思路: (1) dp[i]:以第i项结束的最大和,答案是dp[i]中的最大值,所以要求两次最值!!! (2) dp[i] = max(dp[i-1] + nums[i], nums[i]); dp[i-1] < 0时,dp[i] = nums[i]; dp[i-1] > 0时,dp[i] = dp[i-1] + nums[i]; 所以如上 (3) dp[0] = nums[0]; 代码: public int maxSubArray(int[] nums) { int[]原创 2020-06-01 13:59:36 · 504 阅读 · 0 评论 -
【LeetCode】动态规划合集
leet.198 打家劫舍 思路: (1)定义:dp[i]表示前i家的最大效益; (2)关系式 第i家的收益,分两种情况 <1> 偷第i家,由于不能偷相邻两家:则dp[i] = nums[i] + dp[i-2]; <2> 不偷第i家,则dp[i] = dp[i-1]; 所以,收益dp[i] = max{nums[i] + dp[i-2], dp[i-1]} (3)初值 dp[0] = nums[0]; // 只有一家的收益 dp[1] = max{nums[0]原创 2020-05-29 16:12:59 · 182 阅读 · 0 评论 -
【Leetcode】字符串解码
思路: (1)借助Stack,遇到’]'出栈,往前扫描,记录子串:“数字[字母]”; (2)子串翻倍处理,处理完毕再入栈,栈中从低到高的顺序,就是答案的顺序; (3)借助StringBuilder,显示处理完毕的字符串; 代码: public String decodeString(String s) { if(s.length() == 0) return s; char[] ch = s.toCharArray(); S原创 2020-05-29 14:44:17 · 488 阅读 · 0 评论 -
【Leetcode】刷题总结 plus
1、链表 双指针:首尾指针、快慢指针 2、数组 3、字符串 子串问题:前缀和 4、队列 5、栈 6、哈希表 7、二叉树 8、排序 9、搜索 10、动态规划原创 2020-05-29 14:49:47 · 246 阅读 · 0 评论 -
【Leetcode】青蛙跳台阶问题
(1)思路: DP问题: (1)确定数组含义:dp[i]表示跳到第i阶的方法数; (2)找出数组元素间的关系:跳到第i阶,可以一步跳上来,也可以两步跳上来,所以dp[i]=dp[i-1]+dp[i-2]; (3)找出初始值:dp[0]=1,dp[1]=1; 代码: class Solution { public int numWays(int n) { if(0 == n) return 1; int[] dp = new原创 2020-05-21 20:15:35 · 549 阅读 · 0 评论 -
【Leetcode】两两交换链表中的节点
思路: p、q操作链表; 必须保证每次操作有两个节点; 考虑形成新的链表,不单单只是交换两个元素; 代码: struct ListNode* swapPairs(struct ListNode* head){ if(head == NULL || head->next == NULL) return head; struct ListNode* p = head; struct ListNode* q = head->next; struct ListNode* newHead原创 2020-05-20 10:56:31 · 169 阅读 · 0 评论 -
【Leetcode】验证回文字符串 Ⅱ
思路: 创建首尾指针i,j,向中间移动比较,出现第一次不同字符时: 舍弃i指向的字符,比较(i+1,j); 舍弃j指向的字符,比较(i,j-1); 以上两种情况,只要其中一种满足要求即可。 代码1: bool validPalindrome(char * s){ bool flag1 = true, flag2 = true; int low = 0, high = strlen(s) - 1; while(low<high){ if(s[low] != s[high]){ f原创 2020-05-20 09:35:37 · 148 阅读 · 0 评论 -
【LeetCode】和为K的子数组
方法1:前缀和+哈希表 pre[j - 1] = pre[i] - k 如若目标子数组的下标为(j ~ i),则前i项和与K的差必然为前(j-1)项和,因此用前n项和为key,前n项和出现的次数为value,运用Hash算法,快速得出答案。 复杂度分析: 时间复杂度:O(n) 空间复杂度:O(n) 代码: public int subarraySum(int[] nums, int k) { HashMap<Integer,Integer> map = new H原创 2020-05-18 19:20:49 · 223 阅读 · 0 评论 -
【Leetcode】层次遍历二叉树
思路:BFS 1、根节点加入队列; 2、遍历队列中的节点,将节点的子节点加入队列; (如不需要逐行,则结束) 3、如何实现逐行?需要记录每行队列的长度; 代码: public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> reslist = new ArrayList<>(); Queue<TreeNode> queue = new Li原创 2020-05-13 10:48:05 · 169 阅读 · 0 评论 -
Asteroid Collision
Asteroid Collision原创 2017-11-30 19:55:03 · 312 阅读 · 0 评论 -
Sentence Similarity
Sentence Similarity原创 2017-11-30 11:04:42 · 286 阅读 · 0 评论 -
【Leetcode-5】最长回文子串
最长回文子串原创 2017-11-05 10:31:13 · 161 阅读 · 0 评论 -
Merge Two Binary Trees
Merge Two Binary Trees原创 2017-11-18 20:10:30 · 175 阅读 · 0 评论 -
最长无重复子串
最长无重复子串原创 2017-11-04 17:17:23 · 211 阅读 · 0 评论 -
Convert BST to Greater Tree
Convert BST to Greater Tree原创 2017-11-12 19:50:33 · 146 阅读 · 0 评论 -
最佳股票交易时机
最佳股票交易时机原创 2017-11-08 15:04:53 · 346 阅读 · 0 评论