LeetCode C 刷題85 88題題解

2021-10-23 16:53:02 字數 2839 閱讀 2554

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。

示例:輸入:

[["1","0","1","0","0"],

["1","0","1","1","1"],

["1","1","1","1","1"],

["1","0","0","1","0"]

]輸出: 6

單調棧

class solution 

st.push_back(i);

}return res;

}int maximalrectangle(vector>& matrix)

int n = matrix[0].size();

if(n ==0)

int res = 0;

vectordp(n);

for(int i = 0; i < m; i++)

res = max(res, largestrectanglearea(dp));

}return res;

}};

給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。

你應當保留兩個分割槽中每個節點的初始相對位置。

示例:輸入: head = 1->4->3->2->5->2, x = 3

輸出: 1->2->2->4->3->5

按要求分割成兩部分再合併

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution else

head = head->next;

}right ->next = null;

left->next = second->next;

return first->next;

}};

給定乙個字串 s1,我們可以把它遞迴地分割成兩個非空子字串,從而將其表示為二叉樹。

下圖是字串 s1 = "great" 的一種可能的表示形式。

great

/    \

gr    eat

/ \    /  \

g   r  e   at

/ \a   t

在擾亂這個字串的過程中,我們可以挑選任何乙個非葉節點,然後交換它的兩個子節點。

例如,如果我們挑選非葉節點 "gr" ,交換它的兩個子節點,將會產生擾亂字串 "rgeat" 。

rgeat

/    \

rg    eat

/ \    /  \

r   g  e   at

/ \a   t

我們將 "rgeat」 稱作 "great" 的乙個擾亂字串。

同樣地,如果我們繼續交換節點 "eat" 和 "at" 的子節點,將會產生另乙個新的擾亂字串 "rgtae" 。

rgtae

/    \

rg    tae

/ \    /  \

r   g  ta  e

/ \t   a

我們將 "rgtae」 稱作 "great" 的乙個擾亂字串。

給出兩個長度相等的字串 s1 和 s2,判斷 s2 是否是 s1 的擾亂字串。

示例 1:

輸入: s1 = "great", s2 = "rgeat"

輸出: true

示例 2:

輸入: s1 = "abcde", s2 = "caebd"

輸出: false

三維動態規劃

class solution 

vector>> dp(n, vector>(n, vector(n + 1, 0)));

//初始化單個字元的情況

for(int i = 0; i < n; i++)

}//列舉區間長度2~n

for(int len = 2; len <= n; len++)

//第二種情況:s1->t2,s2->t1

//s1起點i,t2起點 j + 前面那段 len - k,s2起點 i + 前面長度k

if (dp[i][j + len - k][k] && dp[i + k][j][len - k]) }}

}}

return dp[0][0][n];

}};

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。

說明:初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。

你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來儲存 nums2 中的元素。

示例:輸入:

nums1 = [1,2,3,0,0,0], m = 3

nums2 = [2,5,6],       n = 3

輸出: [1,2,2,3,5,6]

雙指標

class solution  else 

} else if(i >= 0 && j < 0) else if(j >= 0 && i < 0) }}

};

LeetCode C 刷題 13 16題題解

羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中...

LeetCode C 刷題 53 56題題解

給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。1 雙指標法 2...

LeetCode C 刷題 69 72題題解

實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2 示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去。二分 clas...