LeetCode第215場周賽

2021-10-10 15:10:24 字數 4070 閱讀 5347

有 n 個 (id, value) 對,其中 id 是 1 到 n 之間的乙個整數,value 是乙個字串。不存在 id 相同的兩個 (id, value) 對。

設計乙個流,以 任意 順序獲取 n 個 (id, value) 對,並在多次呼叫時 按 id 遞增的順序 返回一些值。

實現 orderedstream 類:

示例:

輸入[「orderedstream」, 「insert」, 「insert」, 「insert」, 「insert」, 「insert」]

[[5], [3, 「ccccc」], [1, 「aaaaa」], [2, 「bbbbb」], [5, 「eeeee」], [4, 「ddddd」]]

輸出[null, , [「aaaaa」], [「bbbbb」, 「ccccc」], , [「ddddd」, 「eeeee」]]

解釋orderedstream os= new orderedstream(5);

os.insert(3, 「ccccc」); // 插入 (3, 「ccccc」),返回

os.insert(1, 「aaaaa」); // 插入 (1, 「aaaaa」),返回 [「aaaaa」]

os.insert(2, 「bbbbb」); // 插入 (2, 「bbbbb」),返回 [「bbbbb」, 「ccccc」]

os.insert(5, 「eeeee」); // 插入 (5, 「eeeee」),返回

os.insert(4, 「ddddd」); // 插入 (4, 「ddddd」),返回 [「ddddd」, 「eeeee」]

1 <= n <= 1000

1 <= id <= n

value.length == 5

value 僅由小寫字母組成

每次呼叫 insert 都會使用乙個唯一的 id

恰好呼叫 n 次 insert

用乙個長度為n的陣列將輸入的(id, value)對儲存起來,每次插入的時候檢查id是否等於ptr,如果相等就遍歷陣列找到一段需要的結果,因為陣列所以從前往後遍歷id是遞增的.

class

orderedstream

public list

insert

(int id, string value)

}

如果可以使用以下操作從乙個字串得到另乙個字串,則認為兩個字串 接近 :

操作 2:將乙個 現有 字元的每次出現轉換為另乙個 現有 字元,並對另乙個字元執行相同的操作。

你可以根據需要對任意乙個字串多次使用這兩種操作。

給你兩個字串,word1 和 word2 。如果 word1 和 word2 接近 ,就返回 true ;否則,返回 false 。

示例 1:

輸入:word1 = "abc", word2 = "bca"

輸出:true

解釋:2 次操作從 word1 獲得 word2 。

執行操作 1:"abc" -> "acb"

執行操作 1:"acb" -> "bca"

示例 2:

輸入:word1 = "a", word2 = "aa"

輸出:false

解釋:不管執行多少次操作,都無法從 word1 得到 word2 ,反之亦然。

示例 3:

輸入:word1 = "cabbba", word2 = "abbccc"

輸出:true

解釋:3 次操作從 word1 獲得 word2 。

執行操作 1:"cabbba" -> "caabbb"

執行操作 2:"caabbb" -> "baaccc"

執行操作 2:"baaccc" -> "abbccc"

示例 4:

輸入:word1 = "cabbba", word2 = "aabbss"

輸出:false

解釋:不管執行多少次操作,都無法從 word1 得到 word2 ,反之亦然。

題意問我們,是否可以通過以上兩個操作,從乙個字串得到(接近)(可以直接理解為等於)另乙個字串.

因為操作2,對兩個字串,我們需統計每個字元出現的次數是否一樣,不需要字元與字元之間對應 列如:s1(aab) s2(bba) 我們可以交換a b 出現的次數.但s1 與 s2 **現的字符集必須相同,也就s1中所有的字元s2中必須有,s2中的所有字元s1中也必須有.因為操作1我們不用考慮兩個字串的順序.

class

solution

for(

int i =

0; i < n2; i++

)for

(int i =

0; i <

26; i++

) arrays.

sort

(h1)

; arrays.

sort

(h2)

;for

(int i =

0; i <

26; i++

)return

true;}

}

給你乙個整數陣列 nums 和乙個整數 x 。每一次操作時,你應當移除陣列 nums 最左邊或最右邊的元素,然後從 x 中減去該元素的值。請注意,需要 修改 陣列以供接下來的操作使用。

如果可以將 x 恰好 減到 0 ,返回 最小運算元 ;否則,返回 -1 。

示例 1:

輸入:nums = [1,1,4,2,3], x = 5

輸出:2

解釋:最佳解決方案是移除後兩個元素,將 x 減到 0 。

示例 2:

輸入:nums = [5,6,7,8,9], x = 4

輸出:-1

示例 3:

輸入:nums = [3,2,20,1,1,3], x = 10

輸出:5

解釋:最佳解決方案是移除後三個元素和前兩個元素(總共 5 次操作),將 x 減到 0 。

1 <= nums.length <= 105

1 <= nums[i] <= 104

1 <= x <= 109

雜湊+字首字尾和

先求的陣列的字首和,用個雜湊表存起來,然後求陣列的字尾和,然後在雜湊中查詢是否有字首+字尾等於需要求的值.需注意運算元不可超過陣列的長度.

class

solution

if(map.

containskey

(x)) ans = math.

min(ans, map.

get(x));

sum =0;

for(

int i = n -

1; i >=

0; i--)}

return ans == integer.max_value ?-1

: ans;

}}

雙指標

我們可以先求的得整個陣列的和,然後在陣列中找出一段等於陣列和減去目標值的最長的一段就得到結果.

leetcode 第132場周賽

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...

leetcode周賽 第176場

題目描述 給你乙個 m n 的矩陣 grid,矩陣中的元素無論是按行還是按列,都以非遞增順序排列。請你統計並返回 grid 中 負數 的數目。示例 1 輸入 grid 4,3,2,1 3,2,1,1 1,1,1,2 1,1,2,3 輸出 8 解釋 矩陣中共有 8 個負數。示例 2 輸入 grid 3...

leetcode 第 180 場周賽

大佬都是3 5分鐘一題,而我10分鐘一題,最後一題還不會。qaq 5356.矩陣中的幸運數 給你乙個m n的矩陣,矩陣中的數字各不相同。請你按任意順序返回矩陣中的所有幸運數。幸運數是指矩陣中滿足同時下列兩個條件的元素 class solution object def luckynumbers se...