這次雙周賽有意外,第二第三題按照提示返回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...