![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode 热题 HOT 100
真的要⛽️
一觉醒来天都亮
就在这里记录自己成长的过程吧!
从不要求自己做到最好,只想自己变得更好
展开
-
leetcode 每日打卡—————「32. 最长有效括号」
题目点击这里 ➡️「下一个排列」给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。思路:只有字符串中出现了 ‘)’ 才有可能出现格式正确的情况,利用栈后入先出的特点,从头遍历字符串 s,对于每个字符而言,若为 ‘(’ 则如栈,若为‘)’则需要分情况讨论:若当前栈为空,说明没有匹配成功,更新为下一批有效括号的索引,如果栈不为空,当前右括号的下标减去栈顶元素即为复合条件的括号长度。public int longestValidParentheses(Stri原创 2021-05-30 22:33:59 · 71 阅读 · 0 评论 -
leetcode 每日打卡—————「31. 下一个排列」
题目点击这里 ➡️「下一个排列」思路:题目简化描述就是寻找仅比当前数组大的全排列!那么如何让移动可以尽量小的让全排列变大?即让变大的数字尽可能处于低位(个位变大肯定比十位变大整体变大的少)。eg:1,2,3,6,5,4第一步肯定是3和4对调符合部分题目要求 1,2,4,6,5,3(3为较小值,4为较大值)寻找较小值(需要被右侧数字替换的数字)的方法:从右往左寻找第一个sum[i] < sum[i+1]的值,sum[i]即为较小值;寻找较大值:从右往左第一个比较小值大的即为较大值。这时原创 2021-05-27 12:05:27 · 65 阅读 · 0 评论 -
leetcode 每日打卡———「23. 合并K个升序链表」
题目点击这里 ➡️「合并K个升序链表」思路:首先需要注意,这些链表都是升序链表,那么每次合并后链表的新节点肯定是这K个节点中值最小的一个,所以我们需要一个列表来维护这些节点,为了便于找到这个列表中最小的元素,我们选择使用优先队列来维护K个节点,当一个节点被选中后,这个节点对应链表中的下一个节点就要补充进来。class Solution { // ListNode没有实现Comparable,所以需要我们重新定义一个类,用于排序 static class Pair implements Comp原创 2021-05-26 10:14:50 · 74 阅读 · 0 评论 -
leetcode 每日打卡————「22. 括号生成」
题目点击这里 ➡️「三数之和」思路:深度便利 + 满足筛选条件;当满足左括号数量 == 右括号数量 == 0时,将获得结果,将结果存入数组列表中。(整个过程中需要满足左括号数量 >= 右括号数量)class Solution { List<String> res = new ArrayList<>(); public List<String> generateParenthesis(int n) { dfs("", n, n)原创 2021-05-26 09:59:28 · 88 阅读 · 0 评论 -
leetcode 每日打卡————「15. 三数之和」
题目点击这里 ➡️「三数之和」思路:(双指针)数组进行排序后选定一个基准的数字 nums[i],选定双指针分别指向 nums[i] 的后一个数字(nums[l])和数组的最后一个数字(nums[r]),由于数组是有序的,可以根据与零比较的结果移动左指针和右指针。public List<List<Integer>> threeSum(int[] nums) { // 排序 Arrays.sort(nums); List<Lis原创 2021-05-22 09:10:16 · 73 阅读 · 0 评论 -
leetcode 每日打卡————「11. 盛最多水的容器」
题目点击这里 ➡️「盛最多水的容器」思路:这道题最简单的解法就是 O(n^2)直接遍历,但是这种解法不是我们需要的,算法就是为了提升效率,我们采用 O(n)的指针法来解决问题。首先要知道什么情况下水池的面积最大?当然是两条边距离越远,同时两条边长度越长才会使水的面积越大。所以我们从头尾两个节点开始,这是距离最远的两个节点,“木桶原理“,最短边决定水的面积,所以两条边进行比较短边则向前移动,直到二者相碰循环结束。public int maxArea(int[] height) { in原创 2021-05-18 00:35:21 · 97 阅读 · 0 评论 -
leetcode 每日打卡————「4. 寻找两个正序数组的中位数」
题目点击这里 ➡️「寻找两个正序数组的中位数」思路(合并数组,寻找中位数):public double findMedianSortedArrays(int[] nums1, int[] nums2) { int[] nums = new int[nums1.length + nums2.length]; int index=0,l1=0,l2=0; while (l1 < nums1.length && l2 < nums2.原创 2021-05-16 17:18:25 · 117 阅读 · 2 评论 -
leetcode 每日打卡————「5. 最长回文子串」
题目点击这里 ➡️「最长回文子串」思路:首先考虑如何判断某字符串是否为回文子串?1、若字符串长度为 1,则是回文子串;2、若字符串长度为 2,则考虑两个字符是否相等;3、长度大于 2 时,需要考虑的是,首尾两个字符是否相等,同时去掉首尾后剩下的便是其子串(也需要是回文串)。public String longestPalindrome(String s) { int result = 1, start = 0; int len = s.length();原创 2021-05-14 01:19:11 · 96 阅读 · 0 评论 -
leetcode 每日打卡————「3. 无重复字符的最长子串」
题目点击这里 ➡️「无重复字符的最长子串」思路:采用滑动窗口的思想,保持左边界不变,右边界不断增加,通过 Set 来判断是否有重复的字符存在。public int lengthOfLongestSubstring(String s) { Set<Character> set = new HashSet<Character>(); int len = s.length(); // 右边界初始值为 -1,表示从第一个字符开始原创 2021-05-14 00:31:02 · 65 阅读 · 0 评论