随笔分类 -  LeetCode每日刷题

以medium为主
摘要:☆☆☆☆☆(不是很理解....太绕了 T_T) 思路:二分 + 双指针。题目要求第K个最小距离,所以如果我们有一个有序数组记录着所有可能的最小距离,那么问题就可以变成一个最简单的二分法求解了 本题的难点在于二分查找的不是某个数,而是两个数的差值(即距离)。需要使用双指针来计算出所有小于等于mid的距 阅读全文
posted @ 2020-12-12 19:53 不学无墅_NKer 阅读(144) 评论(0) 推荐(0)
摘要:思路:查找表 + 滑动窗口(窗口大小固定) class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { /** * 方法1:哈希 */ /* Map<Integer,Integer> map = new H 阅读全文
posted @ 2020-12-12 17:50 不学无墅_NKer 阅读(53) 评论(0) 推荐(0)
摘要:首先想到的思路是:利用N皇后问题解法中,通过|a-i| == |b-j| 判断 (a,b)和(i,j)是否在同一条斜线上。但是很多测试用例过不了。。。(例如[[0,0],[1,1],[1,-1]] 输出2) 本题思路:固定一点, 找其他点和这个点组成直线, 统计他们的斜率! class Soluti 阅读全文
posted @ 2020-12-12 14:26 不学无墅_NKer 阅读(163) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆☆☆☆二、解法 思路:暴力解法是O(n^3) 观察到 i 是一个“枢纽”,对于每个点 i ,遍历其余的点到 i 的距离。 时间复杂度O(n^2),空间复杂度O(n) 使用Map,其键是距离,值是距离出现的频次。 例如,如果距离值 dis 对应的频次为1,那就无法找到两个点与 i 距 阅读全文
posted @ 2020-12-11 21:41 不学无墅_NKer 阅读(125) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆☆☆二、解法 方法1:先排序,再判断。 “当且仅当它们的排序字符串相等时,两个字符串是字母异位词。” 方法2:按计数分类。 “当且仅当它们的字符计数(每个字符的出现次数)相同时,两个字符串是字母异位词。” class Solution { public List<List<Stri 阅读全文
posted @ 2020-12-11 17:15 不学无墅_NKer 阅读(98) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆☆☆二、解法 思路:将C+D的每一种可能放入查找表中,时间复杂度为O(n^2)。 由于可能有多组C+D的和相等,用Map记录每一个和出现了多少次。 举一反三:不是直接把数据放入查找表中,而是组合逻辑把特定的内容放入查找表中。还可以把A+B和C+D的每一种可能放入两个查找表中,时间复 阅读全文
posted @ 2020-12-11 15:27 不学无墅_NKer 阅读(84) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆☆二、解法 思路:与15题三数之和类似, 排序+双指针。 class Solution { public int threeSumClosest(int[] nums, int target) { /** * 方法1: 排序 + 暴力法, 时间复杂度O(n^3) */ /*Arra 阅读全文
posted @ 2020-12-11 12:29 不学无墅_NKer 阅读(107) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆☆☆二、解法 思路:与三数之和思想一样,排序+对撞指针。 时间复杂度 O(n^3)+O(nlogn) -> O(n^3) 需要注意去重以及剪枝,小细节非常多。 class Solution { public List<List<Integer>> fourSum(int[] num 阅读全文
posted @ 2020-12-11 11:21 不学无墅_NKer 阅读(85) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆☆☆二、解法 思路:排序+对撞指针,注意需要去重。 class Solution { public List<List<Integer>> threeSum(int[] nums) { /** * 思路:排序 + 对撞指针 * 时间复杂度 O(n^2) */ List<List<I 阅读全文
posted @ 2020-12-11 10:22 不学无墅_NKer 阅读(106) 评论(0) 推荐(0)
摘要:一、题目描述 二、解法 class Solution { public int[] twoSum(int[] nums, int target) { /** * 方法1:暴力枚举。 * 时间复杂度O(n^2),空间复杂度O(1) */ /*for (int i = 0; i < nums.lengt 阅读全文
posted @ 2020-12-10 21:38 不学无墅_NKer 阅读(87) 评论(0) 推荐(0)
摘要:一、题目描述 二、解法 class Solution { public String frequencySort(String s) { if (s == null || s.length() <= 2) return s; Map<Character,Integer> map = new Hash 阅读全文
posted @ 2020-12-10 21:37 不学无墅_NKer 阅读(128) 评论(0) 推荐(0)
摘要:一、题目描述 二、解法 class Solution { public boolean isIsomorphic(String s, String t) { if (s.length() != t.length()) return false; /** * 方法1:使用HashMap,与LeetCo 阅读全文
posted @ 2020-12-10 21:36 不学无墅_NKer 阅读(96) 评论(0) 推荐(0)
摘要:一、题目描述 二、解法 class Solution { public boolean wordPattern(String pattern, String s) { /** * 使用Map * 失败有两种情况: 1.key存在,经过查找字母对应的单词和这个单词不匹配; * 2.key不存在,但是这 阅读全文
posted @ 2020-12-10 21:34 不学无墅_NKer 阅读(64) 评论(0) 推荐(0)
摘要:一、题目描述 二、解法 class Solution { public boolean isHappy(int n) { /** * 方法1:用Set检测循环 */ /*Set<Integer> set = new HashSet<>(); while (n != 1) { if (set.cont 阅读全文
posted @ 2020-12-10 21:32 不学无墅_NKer 阅读(73) 评论(0) 推荐(0)
摘要:一、题目描述 二、解法 class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) return false; int[] dict = new int[26]; /** 阅读全文
posted @ 2020-12-10 21:30 不学无墅_NKer 阅读(82) 评论(0) 推荐(0)
摘要:一、题目描述 二、解法 class Solution { public int singleNumber(int[] nums) { /*Map<Integer,Integer> map = new HashMap<>(); for (int num : nums) { map.put(num, m 阅读全文
posted @ 2020-12-10 21:28 不学无墅_NKer 阅读(75) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆☆☆二、解法 思路:滑动窗口。 时间复杂度O(n) 和LeetCode438. 找到字符串中所有字母异位词属于同一类型的题,滑动窗口的套路就是 扩张->满足条件->收缩 class Solution { public String minWindow(String s, Strin 阅读全文
posted @ 2020-12-08 10:51 不学无墅_NKer 阅读(107) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆☆二、解法 思路:滑动窗口法。用字母字典法判断两个词是否为字母异位词。 代码1:截取法。(时间效率9.25% (ㄒoㄒ)~~) class Solution { public List<Integer> findAnagrams(String s, String p) { List 阅读全文
posted @ 2020-12-07 22:14 不学无墅_NKer 阅读(67) 评论(0) 推荐(0)
摘要:一、题目描述 二、解法 思路:滑动窗口 class Solution { public int lengthOfLongestSubstring(String s) { if (s == null || s.length() == 0) return 0; /*int l = 0, r = 0; i 阅读全文
posted @ 2020-12-07 18:13 不学无墅_NKer 阅读(64) 评论(0) 推荐(0)
摘要:一、题目描述 ☆☆二、解法 方法1:滑动窗口. 时间复杂度 O(n) 、空间复杂度 O(1) 连续子数组 > 【滑动窗口】 class Solution { public int minSubArrayLen(int s, int[] nums) { if (nums == null || nums 阅读全文
posted @ 2020-12-07 16:36 不学无墅_NKer 阅读(81) 评论(0) 推荐(0)