LeetCode
LeetCode相关知识点 打卡点 整理分类归纳点
Tech In Pieces
这个作者很懒,什么都没留下…
展开
-
LeetCode424. Longest Repeating Character Replacement
//这题目待挺奇怪 给一个字符串 只含有大写 然后我们可以在其中任选k个变成其他的大写字母 //我们要求返回最长的只含有一个字母的子字符串 只要求返回长度就行//也就是说 我们要细致选取要要变化的那一部分//这道题真的是一点思路都没有//直接看答案吧class Solution { public int characterReplacement(String s, int k) { int len = s.length(); int[] count = n原创 2021-08-25 04:50:25 · 92 阅读 · 0 评论 -
LeetCode 360. Sort Transformed Array
360. Sort Transformed ArrayDifficulty: MediumRelated Topics: Array, Math, Two Pointers, SortingGiven a sorted integer array nums and three integers a, b and c, apply a quadratic function of the form f(x) = ax<sup>2</sup> + bx + c to each ele原创 2021-08-25 04:49:40 · 210 阅读 · 0 评论 -
LeetCode 345. Reverse Vowels of a String
题意跟简单 就是反转一个string里面所有的vowels就好像其他的非vowels不存在一样。很简单 就是知道几个重要函数String.valueOf(char[] chars): StringSystem.out.println(Arrays.toString(chars))class Solution { public String reverseVowels(String s) { if (s.length() <= 1) return s;原创 2021-08-25 04:49:10 · 118 阅读 · 0 评论 -
LeetCode 287. Find the Duplicate Number
//找出唯一的duplicate number 不能修改nums 用O(1)space//想到了swap 这里有个技巧 我们swap到对应的index 如果nums[index]被index这个数已经占了 就说明index这个数字有两个//但是写完开始跑才发现不太对 因为swap了之后 index=i位置上并没有“排好” 而是index=nums[i]的排好了。所以这个时候i往后走是很不负责任的。class Solution { public int findDuplicate(int[]原创 2021-08-25 04:48:29 · 104 阅读 · 0 评论 -
后端连接数据库:从node.js/express.js 到MongoDB&Mongoose--代码架构演变
之前是node.js和express.js 他们是后端 负责与前端和数据库交流。我们添加了mongoDB之后 代码的整体架构并没有变:还是一个入口js+4个folder分别不同的功能app.js是这入口。controller folder:没有添加任何新的文件models folder:有两个新的文件 place.js和user.js.这两个文件之所以被建立 是因为models folder和数据库密切相关 model就是指的不同的存在数据库里面的表 这个表需要规定相应的schema需要有各种各原创 2021-08-25 04:47:07 · 234 阅读 · 0 评论 -
LeetCode 153/154. Find Minimum in Rotated Sorted Array 1/II
对于LC153 原始数组没有任何重复元素我们可以用两种方法来做第一种 是仿照LC33 search in sorted array. 主要思想就是最小值一定不会存在于sorted好的那一边 就算有 也只是sorted好的最左边才可能。很好写。class Solution { public int findMin(int[] nums) { if (nums == null || nums.length == 0) { return -1;原创 2021-08-25 04:46:10 · 89 阅读 · 0 评论 -
LeetCode 162/1901. Find Peak Element 1/2
给定一个数组 返回某一个peak element所在index 返回这个index即可当然 找一个倒是挺好找 但是题目说了 O(logn)的复杂度,所以久二分但是这怎么二分呢?array都不是有序的 而且这玩意跟二分看起来也没什么关系啊看了一下答案 也不知所云。首先我们看一下不遵从O(logn)时间复杂度的解答:一般人 比如我 会怎么想这道题目?就是扫一遍 逐个检查i i-1 i+1的先对大小?其实 我们只需要比较nums[i]和nums[i+1]的相对大小就行了 就只扫一遍。public c原创 2021-08-25 04:44:03 · 262 阅读 · 0 评论 -
LeetCode 33. Search in Rotated Sorted Array
Search in Rotated Sorted Array这道题还算简单 我也知道是用二分法做 但是为什么下面这种代码就行的通class Solution { public int search(int[] nums, int target) { if(nums == null || nums.length == 0) return -1; int left = 0; int right = nums.length - 1;.原创 2021-08-25 04:43:35 · 45 阅读 · 0 评论 -
LeetCode 327. Count of Range Sum
这道题也有点奇怪 不让你求range sum,让你求在和落在某个给定区间内的range sum的个数。跟之前的LC315 453一样 我们都可以用暴力方法去解 而且也不是很复杂对于这道题目 暴力解就是用presum数组 找出所有的subarray的sum值 然后一个一个的来判断是否落在给定区间。然后统计个数就完事了。构建presum O(n)然后找所有的subarray并得出对应的sum是O(n^2) 所以共需要O(n&2)但是我们来想一下之前reverse pair带来的启发:假设T(0,原创 2021-08-25 04:43:01 · 119 阅读 · 0 评论 -
LeetCode:隐藏在Reverse Pairs类型题目背后的原理
代表题目:315. Count of Smaller Numbers After Self327. Count of Range Sum493.Reverse Pairs以493为代表:参照此链接:总结一下,背后的原理就是要分解子问题 找出夫问题和子问题之间的链接和C(碎片)。重中之重 就是要搞清楚这个碎片的含义。很多有关于数组的问题 都能被break down成子问题,然后得出子问题和原问题之间的表达式 用递归或者地推进行实现。而子问题的原问题表达式中的关键元素C,也是一个最小快的子问题,很好原创 2021-08-25 04:42:09 · 97 阅读 · 0 评论 -
LeetCode 350. Intersection of Two Arrays II
交集被定义成了可以有dumplicate 只要是两者出现的次数就行所以我们要查找 对于那个短的数组的每一个元素:要是此元素不在另一个数组里面 那么OK要是此元素在另一个素组里面 我们要得到他们出现的次数 取最小值总之也很strraight forward.这次用hashmap 存两个就行写出来倒写出来了 这世间空间复杂度真的是不怎么样class Solution { public int[] intersect(int[] nums1, int[] nums2) { in原创 2021-07-28 04:54:03 · 166 阅读 · 0 评论 -
LeetCode 349. Intersection of Two Arrays
很简单的一道题目 主要涉及list和array之间的转化 我是用最蠢的方法写的一遍通过//检查短的哪个 检查每个元素是否在另一个里那个一个数组中存在 检查存在我们用hashset快一点//我们用hashset来检查是否有重复class Solution { public int[] intersection(int[] nums1, int[] nums2) { int len1 = nums1.length; int len2 = nums2.length;原创 2021-07-28 04:53:42 · 138 阅读 · 0 评论 -
LeetCode259 3 sum smaller
好好想想 其实也还可以 就是三个指针 控制住两个 然后第三个来进行binarysearch原创 2021-07-28 04:52:38 · 182 阅读 · 0 评论 -
LeetCode 283 Move Zeros
//move all 0s to the end, maintain original order, do it in-place//每次遇到这种 总是会想两个方法:往左或者往右下落堆积法 或者swap法//这道题 就是往左堆积法//当然啦 那个if else的代码是可以精简的class Solution { public void moveZeroes(int[] nums) { if (nums.length <= 1) return;原创 2021-07-28 04:52:21 · 185 阅读 · 0 评论 -
LeetCode 209. Minimum Size Subarray Sum
//给出的nums全是正数 target也是正数//找出连续的subarray使之和大于等于target 返回这个最小的长度--意思就是最正向接近这个target的subarray//如果没有 返回0class Solution { public int minSubArrayLen(int target, int[] nums) { //像是个典型的滑动窗口的题目 如果大 就往小的方向走 但是 因为给出的nums是无序的 而且我们不能排序 所以这个滑动窗口就要扫过所有的原创 2021-07-28 04:51:46 · 196 阅读 · 0 评论 -
LeetCode 167. Two Sum II - Input array is sorted
//好好读题意 很简单:给一个非递减序列 和一个target 找出一对和为tarhet的 返回1-indexed index pair//规则是不能用同一个element两次 最红只有一个答案class Solution { public int[] twoSum(int[] numbers, int target) { int i = 0; int j = numbers.length - 1; while (i < j) { //not原创 2021-07-28 04:51:28 · 122 阅读 · 0 评论 -
LeetCode 159. Longest Substring with At Most Two Distinct Characters
并不算太难 只要理清关系就好了唯一一个要注意的点是res在哪里更新 这个地方的选取不是随便选取得。//分常直接 返回最长的substring 满足最多有两个unique chars的要求//不过只需要返回这个最长的长度就行了//听上去像是DP 对吧class Solution { public int lengthOfLongestSubstringTwoDistinct(String s) { //就双指针 监控着双指针内部的unique char的个数原创 2021-07-28 04:50:11 · 183 阅读 · 0 评论 -
LeetCode 141/142. Linked List Cycle 1/2
经典中的经典//经典的快慢双指针public class Solution { public boolean hasCycle(ListNode head) { ListNode slow = head; ListNode fast = head; while (fast != null && fast.next != null) { slow = slow.next;原创 2021-07-28 04:49:50 · 168 阅读 · 0 评论 -
LeetCode 125. Valid Palindrome
这类的题目 感觉更是像在考你细心程度 以及对字符串相关函数的掌握程度。不过搞错了 以为只是字母字符 实际上alphanumeric characters指的是字母数字字符是一个很简单的题目 但是在一个地方搞错了 卡了不少时间。搞错的地方间注释处。要尤其注意这种问题。以为自己是更新了 但是实际上没有更新。class Solution { public boolean isPalindrome(String s) { if (s.length() <= 1) return原创 2021-07-28 04:49:31 · 162 阅读 · 0 评论 -
LeetCode 88. Merge Sorted Array
有点 小技巧 不过还算是很简单的class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { //题目有点绕 但是也说得很清楚 //ums1长度为m+n 但是只有前面的m个事真正有用的 后面的只是占位符而已。 //首先我们把nums2直接填充到里面肯定不太行 //想到了双指针 但是我们没法在nums1里面从前往后覆盖 毕竟两个加和速度太快 会对原创 2021-07-28 04:49:11 · 116 阅读 · 0 评论 -
LeetCode 234. Palindrome Linked List
linkedlist检测palindrome看起来简单 实际上没那么简单 因为linkedlist不像普通的array可以前后移动自由所以只能从中间截断 分成两个链表 反转其中一个链表 然后从头比较自己写了一下 虽然不难 但是总是忘记在声明假头之后 忘记把假头安装在真头上面。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *原创 2021-07-25 04:27:32 · 159 阅读 · 0 评论 -
LeetCode 86. Partition List
更准确的来说 应该是Partition Linked List给出一个链表 一个数值 比这个数值小的放在放在尾部 其余放在头部。注意每一部分要相对位置不能变。没说是不是要in place所以应该挺简单的。代码也非常直接:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNo原创 2021-07-25 04:27:06 · 198 阅读 · 0 评论 -
LeetCode 76. Minimum Window Substring
其实下面的暴力解法还行 不是很烂 还是做了一些优化的 而且模块化也做的不错。虽然能跑,但是有些case TLE了。class Solution { public String minWindow(String s, String t) { //题意很简单 就是找到一个包含t的 在s里面作为substring的最短的window //这里的包含t 是指的就算是乱序也无所谓 但是重复的也要不能少 //暴力解发就是找出所有的长度大于等于t的substrin原创 2021-07-25 04:26:46 · 195 阅读 · 0 评论 -
LeetCode75. Sort Colors
也是老经典了 本质上就是一道实现普通的sort的算法但是因为只有三个色 因此不用普通的排序算法也可以。自己写了一些代码比较冗长 不过跑起来性能还不错。//do a inplace sort, put 0 together, 1 togerther and 2 togetherclass Solution { public void sortColors(int[] nums) { //左右双指针 双向双指针 swap //first sort 0, put原创 2021-07-25 04:26:11 · 178 阅读 · 0 评论 -
LeetCode 61. Rotate List
这个也很经典 但是在k0或者len0的时候有点tricky.第一遍写的时候并没有完全注意到。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode ne原创 2021-07-25 04:25:50 · 106 阅读 · 0 评论 -
LeetCode 42. Trapping Rain Water
很经典就是了class Solution { public int trap(int[] height) { //也是一道很经典的双指针 //从左到右 遍历每个slot,然后往外扩 然后全部加起来 //而且我记得每个slot只是保存自己的 int res = 0; for (int i = 0; i < height.length; i++) { //对每个slot都左右开弓 找左边的最大原创 2021-07-25 04:25:06 · 107 阅读 · 0 评论 -
LeetCode 30. Substring with Concatenation of All Words
与之前的indexOf()不同 这次我们要匹配一大串 而且这次也不是仅仅只返回一个index 而是返回所有可能的。至于要匹配的,是一个字符串数组内部的任意排列组合,只要每个单词都只出现一次 顺序并不重要...原创 2021-07-25 04:24:50 · 144 阅读 · 0 评论 -
LeetCode 19: Remove Nth node from end of List
也是很经典了 不要忘记dummy node//经典的双指针问题class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(); dummy.next = head; ListNode cur = dummy; int step = n; //assume n with原创 2021-07-24 04:53:55 · 148 阅读 · 0 评论 -
LeetCode 018 4 Sum
以为很简单 写了些 但是不太对 以后还是用for循环去写外层吧class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { //还是不能有重复的quadruplets List<List<Integer>> res = new ArrayList<>(); if (nums == null || n原创 2021-07-24 04:53:36 · 94 阅读 · 0 评论 -
LeetCode015/016: 3 Sum/3 Sum closest
3 Sum.我知道这个是一个很简单的双指针问题,虽然要处理重复元素很麻烦 但是能勉强写出来。只有一个点要注意一下: j k指针要去重 i指针也要去重!class Solution { public List<List<Integer>> threeSum(int[] nums) { //经典的双指针 List<List<Integer>> res = new ArrayList<>();原创 2021-07-24 04:53:12 · 136 阅读 · 0 评论 -
LeetCode 11 Container with Most Water
很经典的题目 自然不必多说11. Container With Most WaterDifficulty: MediumRelated Topics: Array, Two Pointers, GreedyGiven n non-negative integers a<sub style="display: inline;">1</sub>, a<sub style="display: inline;">2</sub>, ..., a<sub s原创 2021-07-24 04:52:11 · 153 阅读 · 0 评论 -
LeetCode003:Longest Substring Without Repeating Characters
3. Longest Substring Without Repeating CharactersDifficulty: MediumRelated Topics: Hash Table, String, Sliding WindowGiven a string s, find the length of the longest substring without repeating characters.Example 1:Input: s = "abcabcbb"Output: 3Expl原创 2021-07-24 04:51:40 · 157 阅读 · 0 评论 -
LeetCode208 Implement Trie
实现下面几个函数:insert(String word): voidsearch(String word): booleansearchWith(String prefix): boolean原创 2021-07-24 04:51:14 · 86 阅读 · 0 评论 -
Binary Search相关精简总结
我们推荐左闭右闭写法。就是说lo = 0, hi = len - 1;binarySearch的写法 根据我们的不同需要,一般有以下几个重点:while(left < right) OR while (left <= right) OR while(left < right - 1)left = mid/mid+1 right = mid/mid-1;return left OR right OR left -1 etc首先 我们要注意 如果我们想写left = mid或者ri原创 2021-07-24 04:47:38 · 101 阅读 · 0 评论 -
LeetCode173 Binary Search Tree Iterator
Implement the BSTIterator class that represents an iterator over the in-order traversal of a binary search tree (BST)就是说 实现一个书的中序遍历遍历器这个遍历器有两个功能,一个是hasNext()另外一个是next()这就简单了 就只用一个指针和一个stac就行了 具体的代码如下:class BSTIterator { private TreeNode cur;原创 2021-07-23 04:45:12 · 96 阅读 · 0 评论 -
LeetCode 170 Two Sum 3
实现一种叫TwoSum的数据结构,使得其能够从数据流迅速查找是否含有和为target的pair首先我们想一下 一般的two sum怎么解决?就是一个array,然后sort一下 然后前后双向双指针。跟现在情况有什么区别呢?现在首先就是长度不确定了。那咋办?就list呗!可是List怎么样sort呢?用Collections来sort呗,然后还是双指针呗。基于上面的思想 很快就写出来了:class TwoSum { private List<Integer> nums;原创 2021-07-23 04:44:43 · 109 阅读 · 0 评论 -
LeetCode 155 Min Stack
两个stack,一个Push进去所有的 另一个只push进去非递增的不明白为什么 就这么写就行了class MinStack { private int min; private Stack<Integer> stack; /** initialize your data structure here. */ public MinStack() { stack = new Stack(); min = Integer原创 2021-07-23 04:43:56 · 102 阅读 · 0 评论 -
LeetCode 146 LRU Cache
146. LRU CacheDifficulty: MediumRelated Topics: Hash Table, Linked List, Design, Doubly-Linked ListDesign a data structure that follows the constraints of a .Implement the LRUCache class:LRUCache(int capacity) Initialize the LRU cache with positive s原创 2021-07-22 05:19:11 · 120 阅读 · 0 评论 -
LeetCode: 排列组合相关问题总结
最最常见的不过四种:给定一个无重复/有重复的数组,输出其所有的排列/组合解决方法大致上也是构建递归树 进行合理剪枝排列组合问题:LC46 无重复元素的排列LC47 有重复元素的排列LC77 无重复元素的组合subset问题:LC78 无重复元素的子集LC90 有重复元素的子集无重复元素的排列:class Solution { public List<List<Integer>> permute(int[] nums) { List<原创 2021-07-22 05:18:45 · 146 阅读 · 0 评论 -
LeetCode: 设计(Design)相关问题总结
一般来说 Design是为了靠你灵活的使用数据结构和算法的,也就是说 考你如何利用现有的数据结构或算法组合 或者如何从现有的算法或数据结构中抽象并实现出一种能够解决当前问题的DS/Alg.=======================================146 LRU cache: HashMap and self defined Node(double linkedList node with k-v pair as the data)we use hashMap because we原创 2021-07-22 05:16:52 · 303 阅读 · 0 评论