原创 Happy New Year! 2024 第一題

A. Theatre Square time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard outp

原创 Leetcode 2289. Steps to Make Array Non-decreasing (單調棧)

題目 題解: 對於每個元素,它只有當左邊的元素大於它的時候才能被刪去。 維護一個數組,dp dp[i]表示第i個元素被刪去需要多少步 維護一個單調遞減的棧,用來查找每個元素的左邊的第一個大於它的元素的位置 對於每個元素i,假設左邊第一個大

原创 LeetCode Weekly Contest 281

第一題 class Solution { public: int countEven(int num) { int ans = 0; for(int i=1;i<=num;i++)

原创 LeetCode weekly contest 278 (amazon pay)

------------恢復內容開始------------ 第一題 簡單的二分查找 class Solution { public: int findFinalValue(vector<int>& nums, int origin

原创 LeetCode 2040. Kth Smallest Product of Two Sorted Arrays

題目 題意: 兩個拍排好序的數組,a, b 問你第k小的兩個數組的元素乘積是多大。 題解: 兩個數組的元素乘積最小是-10^5 * 10^5 最大是10^5 * 10^5 我們可以在這個範圍內做二分,那麼問題的關鍵就是能不能給你一個數,讓你

原创 LeetCode 1931. Painting a Grid With Three Different Colors(DP)

題目 題解,動態規劃 因爲m 最大隻有5,所以我們可以枚舉5個相鄰的塊,最多有多少種可能, 然後分析每個是否能與其他幾個並排,然後就是簡單的BP了 class Solution { public: int dp[50][5];

原创 LeetCode 1803. Count Pairs With XOR in a Range (二叉樹)

題目 在一個數組裏面找到兩個數異或的結果在某個範圍之內。 這種題目,就要用二叉樹, 代碼寫的又臭又長。。 struct Node { int value; int left; int right; int num; int

原创 LeetCode 1766. Tree of Coprimes

題目 題意: 對於樹上的每個節點,找出與它的值互質的最近的祖先節點。 題解: 由於節點上的值在1-50之間,所以算互質很好算,事先算法。然後就是深度優先遍歷樹的時候維護路徑上的節點的位置,利用1-50這個小範圍,快速找到與當前節點值互質的值

原创 LeetCode 1739. Building Boxes

https://leetcode.com/problems/building-boxes/ 題意:在一個邊長是n的立方體中放n個方塊,方塊可以疊加,但是被疊加的在下方的方塊八面必須挨着牆或者別的方塊。 問最底部最少可以放多少個方塊。 這是一

原创 1745. Palindrome Partitioning IV (迴文樹)

題目 題意:判斷一個字符串是否可以由三個迴文串組成 題解:利用強大的迴文樹,計算出以每個字符爲結尾的迴文串,然後從字符串的最後一個字符開始,遞歸判斷。 struct Tree { int next[4005][30]; int fail

原创 1755. Closest Subsequence Sum

題目 題意:從一個數組找出一個子集,使得子集的和給定的目標最相近。 題解:數組的長度爲40,找出全部子集一共有240種可能性,如果把一個數組平均分成兩部分,分別算出兩部分的所有子集和,每部分有220種可能, 然後再二分查找答案。 遇到這種在

原创 LeetCode 1723. Find Minimum Time to Finish All Jobs

題目 題意:將n個數分成k組,使得k組中的最大值最小。 題解:暴力DFS,但是要注意兩個地方剪枝,首先在DFS的過程中判斷當前的最大值是不是已經超過了已有答案。 第二個剪枝的地方比較triky,由於我們對k組沒有順序要求的,所以當剩下的組都

原创 LeetCode 1632. Rank Transform of a Matrix

題目 拖了兩個月,終於這這道題目AC了。 思路是貪心,將所有的元素從小到大排序。並且維護兩個數組,一個數組代表每一行的當前已經填上的最大的rank,比如nrank[0]=2 表示第0行,目前已經填到了rank=2,下一個再填就一定是>=2的

原创 LeetCode 1547. Minimum Cost to Cut a Stick(動態規劃)

題目 區間DP,由於棍子長100萬,所以我們在cuts之間做區間DP。 那麼狀態轉移方程就是很簡單直白的區間DP dp[i][j] = min { dp[i][k-1] + cost(k) + dp[k+1][j]} i<=k<=j cos

原创 LeetCode 1546. Maximum Number of Non-Overlapping Subarrays With Sum Equals Target(動態規劃)

題目 題意:在一個數組中,找到最多的不相交的子序列,每個子序列的和等於target。 題解:動態規劃 dp[i]表示從0到i的子數組的答案。維護前綴數組sums[],我們維護一個記錄前綴和的map,map[x]表示前綴和是x距離當前i最近的