LeetCode
Doyle_
一个IT小白
展开
-
【leetcode】丑数相关题
丑数相关题264.丑数II313.超级丑数264.丑数IIclass Solution { int[] nums = new int[]{2, 3, 5}; public int nthUglyNumber(int n) { Queue<Long> q = new PriorityQueue<>(); Set<Long> s = new HashSet<>(); q.add(1L);原创 2021-08-10 10:33:51 · 264 阅读 · 0 评论 -
【leetcode】哈希表相关题
哈希表相关题变位词组变位词组法1:对每个字符串进行排序作为 key,从而实现相同的「变位词」对应同一个 key,使用哈希表进行统计class Solution { public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> ans = new ArrayList<>(); Map<String, L原创 2021-07-18 19:05:48 · 148 阅读 · 0 评论 -
【leetcode】动态规划
动态规划相关题打家劫舍连续子数组的最大和打家劫舍class Solution { public int rob(int[] nums) { int n=nums.length; if(n==0) return n; int []dp=new int[n+1]; dp[0]=0; dp[1]=nums[0]; for(int i=2;i<=n;i++){ dp[i]=Mat原创 2021-07-18 16:44:47 · 139 阅读 · 0 评论 -
【leetcode】回溯法
回溯法相关问题组合全排列字母大小写全排列回溯法解决组合问题与排序问题的区别:回溯法在组合问题中元素的顺序不用考虑,只需要从当前位置向后寻找。排序问题每次都需要从头寻找,需要使用visited数组记录访问过的元素。组合class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> ans = new LinkedLis原创 2021-07-16 09:55:02 · 91 阅读 · 0 评论 -
【leetcode】链表 总结
链表合并两个有序链表反转链表合并两个有序链表设定一个哨兵节点 prehead ,这可以在最后比较容易地返回合并后的链表维护一个 pre指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, Lis原创 2021-07-13 18:41:43 · 163 阅读 · 0 评论 -
【leetcode】层次遍历 (BFS)总结
BFS相关题总结填充每个节点的下一个右侧节点指针01矩阵腐烂的橘子填充每个节点的下一个右侧节点指针层次遍历将二叉树的每一层节点都连接起来形成链表。层次遍历基于广度优先搜索 区别在于:广度优先搜索每次只会取出一个节点来拓展,而层次遍历每次将队列中的所有元素拿来拓展,保证每次从队列中拿出来遍历的元素都是同一层的。class Solution { public Node connect(Node root) { if (root == null) return null;原创 2021-07-13 15:58:25 · 415 阅读 · 0 评论 -
【leetcode】哈希表 & 摩尔投票
面试题 17.10. 主要元素解1:【用哈希表】class Solution { public int majorityElement(int[] nums) { int n=nums.length; Map<Integer,Integer> map=new HashMap<>(); for(int i=0;i<nums.length;i++){ map.put(nums[i],map.get原创 2021-07-09 16:29:00 · 130 阅读 · 0 评论 -
【leetcode】前缀和+哈希表
leetcode930class Solution { public int numSubarraysWithSum(int[] nums, int goal) { int n=nums.length; int []sum=new int[n+1]; //前缀和 for (int i = 1; i <=n ; i++) { sum[i]=sum[i-1]+nums[i-1]; }原创 2021-07-08 18:46:54 · 212 阅读 · 0 评论 -
【leetcode】二分法 +倍增模板
二分法模板while (l < r) { long mid = l + r + 1 >> 1; if (check(mid)) { l = mid; } else { r = mid - 1; }}或者·long l = 0, r = 1000009;while (l < r) { long mid = l + r >> 1; if (check(mid)) {原创 2021-06-27 17:33:16 · 239 阅读 · 0 评论 -
【leetcode】下一个更大的元素
给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1://输入: nums1 = [4,1,2], nums2 = [1,3,4,2].//输出: [-1,3,-1]//解释:// 对于 num1 中的数字 4 ,你无法原创 2021-04-02 21:32:49 · 193 阅读 · 0 评论 -
【leetcode个人练习记录】 滑动窗口的问题
1.从本质上来看 ,滑窗是双指针,一根指针指向左端点,一根指针指向右端点。2.右指针移动是可以表示扩张窗口,左指针移动表示缩小窗口。3.如果当前元素满足需求时,可以挪动右指针尝试更优解,并且更新需要记录的变量(元素,元素个数++等)4. 如果当前窗口内的元素不满足条件,可以挪动左指针尝试调整,并且更新需要记录的变量(元素,元素个数–等)5. 通过以上步骤窗口就可以滑动起来了,在滑动的过程中及时更新答案,一般这类问题都是求最大或者最小。关键点在于找到一个 不满足条件的情况 使得左指针移动,这样可以原创 2021-02-23 22:20:20 · 184 阅读 · 0 评论