leetcode第8場雙周賽

2021-09-26 23:51:21 字數 3849 閱讀 9235

這次雙周賽有意外,第二第三題按照提示返回int會報錯,要返回list

第一題給你乙個字串 s,返回只含 單一字母 的子串個數。

示例 1:

輸入: 「aaaba」

輸出: 8

解釋:只含單一字母的子串分別是 「aaa」, 「aa」, 「a」, 「b」。

「aaa」 出現 1 次。

「aa」 出現 2 次。

「a」 出現 4 次。

「b」 出現 1 次。

所以答案是 1 + 2 + 4 + 1 = 8。

public int countletters(string s) 

char cs = s.tochararray();

char cc = cs[0];

int k = 1;

int ans = 0;

for (int i = 1; i < cs.length; i++) else

} ans += getans(k);

return ans;

}private int getans(int k)

第二題

給你乙個「短語」列表 phrases,請你幫忙按規則生成拼接後的「新短語」列表。

「短語」(phrase)是僅由小寫英文本母和空格組成的字串。「短語」的開頭和結尾都不會出現空格,「短語」中的空格不會連續出現。

「前後拼接」(before and after puzzles)是合併兩個「短語」形成「新短語」的方法。我們規定拼接時,第乙個短語的最後乙個單詞 和 第二個短語的第乙個單詞 必須相同。

返回每兩個「短語」 phrases[i] 和 phrases[j](i != j)進行「前後拼接」得到的「新短語」。

注意,兩個「短語」拼接時的順序也很重要,我們需要同時考慮這兩個「短語」。另外,同乙個「短語」可以多次參與拼接,但「新短語」不能再參與拼接。

請你按字典序排列並返回「新短語」列表,列表中的字串應該是 不重複的 。

示例 1:

輸入:phrases = [「writing code」,「code rocks」]

輸出:[「writing code rocks」]

示例 2:

輸入:phrases = [「mission statement」,

「a quick bite to eat」,

「a chip off the old block」,

「chocolate bar」,

「mission impossible」,

「a man on a mission」,

「block party」,

「eat my words」,

「bar of soap」]

輸出:[「a chip off the old block party」,

「a man on a mission impossible」,

「a man on a mission statement」,

「a quick bite to eat my words」,

「chocolate bar of soap」]

public  listbeforeandafterpuzzles(string phrases) 

toplist.add(i);

listendlist = endmap.get(ss[ss.length - 1]);

if (endlist == null)

endlist.add(i);

} for (string topkey : topmap.keyset())

listtoplist = topmap.get(topkey);

for (integer top : toplist)

ans.add(getres(res[end], res[top]));

}} }

listree = new arraylist(ans);

ree.sort(new comparator()

});return ree;

}private string getres(string res, string res2)

for (int i = 0; i < res2.length; i++)

return ans.substring(1);

}

第三題

給你乙個陣列 colors,裡面有 1、2、 3 三種顏色。

我們需要在 colors 上進行一些查詢操作 queries,其中每個待查項都由兩個整數 i 和 c 組成。

現在請你幫忙設計乙個演算法,查詢從索引 i 到具有目標顏色 c 的元素之間的最短距離。

如果不存在解決方案,請返回 -1。

示例 1:

輸入:colors = [1,1,2,1,3,2,2,3,3], queries = [[1,3],[2,2],[6,1]]

輸出:[3,0,3]

解釋:距離索引 1 最近的顏色 3 位於索引 4(距離為 3)。

距離索引 2 最近的顏色 2 就是它自己(距離為 0)。

距離索引 6 最近的顏色 1 位於索引 3(距離為 3)。

這道題其實就是左右各找一次,找到短的那個

public listshortestdistancecolor(int colors, int queries) 

len[0] = 100000;

len[1] = 100000;

len[2] = 100000;

for (int i = colen - 1; i >= 0; i--)

for (int i = 0; i < queries.length; i++)

return ans;

}

第四題

現在有乙個尺寸為 width * height 的矩陣 m,矩陣中的每個單元格的值不是 0 就是 1。

而且矩陣 m 中每個大小為 sidelength * sidelength 的 正方形 子陣中,1 的數量不得超過 maxones。

請你設計乙個演算法,計算矩陣中最多可以有多少個 1。

示例 1:

輸入:width = 3, height = 3, sidelength = 2, maxones = 1

輸出:4

解釋:題目要求:在乙個 33 的矩陣中,每乙個 22 的子陣中的 1 的數目不超過 1 個。

最好的解決方案中,矩陣 m 裡最多可以有 4 個 1,如下所示:

[1,0,1]

[0,0,0]

[1,0,1]

示例 2:

輸入:width = 3, height = 3, sidelength = 2, maxones = 2

輸出:6

解釋:[1,0,1]

[1,0,1]

[1,0,1]

這道題你要理解1填的位置的優先順序,然後就知道怎麼做了

每個sidelength * sidelength的格仔,1的方位應該一致

public int maximumnumberofones(int width, int height, int sidelength,

int maxones)

ans += wyu * hyu;

if (wn >= hn) else if (((maxones - hyu * sidelength) + wyu * hyu) <= sidelength

* wyu) else

} else else if (((maxones - wyu * sidelength) + hyu * wyu) <= sidelength

* hyu) else

}}

leetcode第 24 場雙周賽

給你乙個整數陣列nums。你可以選定任意的正數startvalue 作為初始值。你需要從左到右遍歷nums陣列,並將 startvalue 依次累加上nums陣列中的值。請你在確保累加和始終大於等於 1 的前提下,選出乙個最小的正數作為 startvalue 輸入 nums 3,2,3,4,2 輸出...

leetcode 第27場雙周賽

通過翻轉子陣列使兩個陣列相等 檢查乙個字串是否包含所有長度為k的二進位制子串 課程安排 摘櫻桃 3分 簡單 4分 中等 5分 中等 6分 困難 翻譯下題意,其實就是問我們兩個陣列是否相等,判斷陣列是否相等有很多方法,這邊我直接排序,遍歷一遍看是否有不一樣的元素 陣列排序的複雜度,故為o nlogn ...

Leetcode 第30場雙周賽

第一眼看到這題就覺得用python做會很簡單,但是我的python實在是不太行,所以就拿c 硬懟了。c class solution string ms 12 string res int len s.size res res s len 4 s len 3 s len 2 s len 1 stri...