随笔分类 - 算法
随手写的
摘要:https://leetcode.cn/problems/split-array-largest-sum/description/ 比较难的二分,关键点在于看出二段性,段数越多最大值越小,段数越小最大值越大,二分最大值,然后就是最大值的合法性校验(判断段数<=k),用于二分的check class
阅读全文
摘要:https://leetcode.cn/problems/trapping-rain-water/description/大厂经典题,接雨水暴力双指针->预处理优化->单调栈 暴力: class Solution { public int trap(int[] height) { // 暴力解法:
阅读全文
摘要:https://leetcode.cn/problems/next-greater-element-ii/description/ class Solution { public int[] nextGreaterElements(int[] nums) { // 成环的单调栈题,思路1:将nums
阅读全文
摘要:https://leetcode.cn/problems/next-greater-element-i/description/ 根据校验nums2中的元素是否存在于nums1中 的时机 分为不同做法 class Solution { public int[] nextGreaterElement(
阅读全文
摘要:https://leetcode.cn/problems/daily-temperatures/description/ 经典单调栈,关键难点在于如何利用单调栈这个数据结构解题题意要求向右找到第一个比当前大的元素,若是暴力则是O(n^2),但是依据暴力的这个思想可以利用单调栈优化,因为求右边第一个比
阅读全文
摘要:https://leetcode.cn/problems/all-paths-from-source-to-target/description/ class Solution { List<List<Integer>> res = new ArrayList<>(); int[][] g; //
阅读全文
摘要:https://leetcode.cn/problems/daily-temperatures/ class Solution { public int[] dailyTemperatures(int[] temperatures) { // 经典单调栈 // 核心思想就是及时去除无用数据,保证栈中
阅读全文
摘要:https://leetcode.cn/problems/longest-palindromic-subsequence/description/ class Solution { public int longestPalindromeSubseq(String s) { // f[i][j]表示
阅读全文
摘要:https://leetcode.cn/problems/palindromic-substrings/ 经典题,本题有双指针和dp两种做法,dp的定义是f[i][j]表示s[i:j]是回文串容易联想到递推方程f[i][j]=f[i+1][j-1] && s[i]==s[j]又因为1个字符或者两个相
阅读全文
摘要:https://leetcode.cn/problems/edit-distance/ class Solution { public int minDistance(String word1, String word2) { // 经典题编辑距离 // f[i][j]表示word1前i个字符中选择
阅读全文
摘要:https://leetcode.cn/problems/delete-operation-for-two-strings/solutions/ 两种做法,1.直接dp 2.转换题意,思考成LCS class Solution { public int minDistance(String word
阅读全文
摘要:https://leetcode.cn/problems/distinct-subsequences/submissions/563375885/ 这题比较有难度,具体不太好想到,需要以是否选择s[i]来划分子集这位描述的很清楚,不做过多赘述 class Solution { public int
阅读全文
摘要:https://leetcode.cn/problems/is-subsequence/description/ class Solution { public boolean isSubsequence(String s, String t) { // 依据题意,可以判断是求最长公共子序列的特殊情
阅读全文
摘要:https://leetcode.cn/problems/maximum-subarray/description/ class Solution { public int maxSubArray(int[] nums) { // f[i]表示以第i个数为结尾的最大连续子数组和 // 以是否选择第i
阅读全文
摘要:https://leetcode.cn/problems/uncrossed-lines/ class Solution { public int maxUncrossedLines(int[] nums1, int[] nums2) { // 依据题意,稍加思考可知,是求最长公共子序列 // f[
阅读全文
摘要:https://leetcode.cn/problems/longest-common-subsequence/description/经典题,老题回顾 class Solution { public int longestCommonSubsequence(String text1, String
阅读全文
摘要:https://leetcode.cn/problems/maximum-length-of-repeated-subarray/ 难点是在于状态定义,需要考虑到以第i个数为结尾,以第j个数为结尾的最长重复子数组 这样的定义而递推就很简单,只需要发生重复时+1即可,和之前的一维的,即最长子数组一样
阅读全文
摘要:https://leetcode.cn/problems/longest-increasing-subsequence/description/ class Solution { public int lengthOfLIS(int[] nums) { // f[i]表示以第i个数为结尾的最长严格上
阅读全文
摘要:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ class Solution { public int maxProfit(int[] prices, int fee) { // f
阅读全文
摘要:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/ class Solution { public int maxProfit(int[] prices) { // f[i][
阅读全文

浙公网安备 33010602011771号