LeetCode Two Pointers
Tech In Pieces
这个作者很懒,什么都没留下…
展开
-
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 · 182 阅读 · 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 评论 -
Binary Search Common Problems
find the first number index that is larger or equals to target.(就是说返回target的最后一个index,或者比target大的第一个index,如果一定要确定放在target的最后一个index上,那最后一定要check right指针是不是对应target)int binarySearch(int[] arr, int target){ int left = 0, right = arr.length - 1; whi原创 2020-05-20 04:20:42 · 86 阅读 · 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 评论 -
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 评论