LeetCode 3月22日打卡 Day7

2021-10-04 06:06:44 字數 1788 閱讀 3484

思路:先用arrays.sort()對陣列進行排序,遍歷排序後的陣列,如果後乙個元素小於前乙個元素,則後乙個元素+1,移動的步數等於當前位置變更後的值與陣列原先值之差,所有差之和即為總的移動步數。

class

solution

}return count;

}}

思路:我拿到題目後的第一種思路是計數+暴力法,在小資料的測試用例下都可以得到正確答案,思路也沒有問題,疑惑的是無法通過超級大且多的資料。後來看了官方的解答知道了答案。

雖然 a[i] 的範圍為 [0, 40000),但我們有可能會將資料遞增到 40000 的兩倍 80000。這是因為在最壞情況下,陣列 a 中有 40000 個 40000,這樣要使得陣列值唯一,需要將其遞增為 [40000, 40001, …, 79999],因此用來統計的陣列需要開到 80000。

當我們找到乙個沒有出現過的數的時候,將之前某個重複出現的數增加成這個沒有出現過的數。注意,這裡 「之前某個重複出現的數」 是可以任意選擇的,它並不會影響最終的答案,因為將 p 增加到 x 並且將 q 增加到 y,與將 p 增加到 y 並且將 q 增加到 x 都需要進行 (x + y) - (p + q) 次操作。例如當陣列 a 為 [1, 1, 1, 1, 3, 5] 時,我們發現有 3 個重複的 1,且沒有出現過 2,4 和 6,因此一共需要進行 (2 + 4 + 6) - (1 + 1 + 1) = 9 次操作。

class

solution

else

if(taken >

0&& count[x]==0

)}return ans;

}}

給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須僅使用 o(1) 額外空間並 原地 修改輸入陣列。

元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。

示例 1:

給定 nums = [3,2,2,3], val = 3,

函式應該返回新的長度 2, 並且 nums 中的前兩個元素均為 2。

你不需要考慮陣列中超出新長度後面的元素。

示例 2:

給定 nums = [0,1,2,2,3,0,4,2], val = 2,

函式應該返回新的長度 5, 並且 nums 中的前五個元素為 0, 1, 3, 0, 4。

注意這五個元素可為任意順序。

你不需要考慮陣列中超出新長度後面的元素。

說明:

為什麼返回數值是整數,但輸出的答案是陣列呢?

請注意,輸入陣列是以「引用」方式傳遞的,這意味著在函式裡修改輸入陣列對於呼叫者是可見的。

你可以想象內部操作如下:

// nums 是以「引用」方式傳遞的。也就是說,不對實參作任何拷貝

int len = removeelement(nums, val);

// 在函式裡修改輸入陣列對於呼叫者是可見的。

// 根據你的函式返回的長度, 它會列印出陣列中 該長度範圍內 的所有元素。

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

思路:類似於昨天的題2,用i指標來移動,用j指標來指向與val相同的元素位置,用i指標指向的元素向前覆蓋j位置的值

class

solution

}return j;

}}

LeetCode 3月17日打卡 Day2

class solution for string word words else if flag return len 妙在借用字母的排列順序,可以用int陣列中的位置資訊表示字母,而不需要用map再來存鍵值 string 轉 char chars.tochararray for迴圈的寫法 遍歷陣...

2023年3月22日作業

6 設有乙個spj資料庫,包括s,p,j,spj四個關係模式 1 求 工程j1零件的 商號碼sno 2 求 工程j1零件p1的 商號碼sno 3 求 工程j1零件為紅色的 商號碼sno 4 求沒有使用天津 商生產的紅色零件的工程號jno 5 求至少用了 商s1所 的全部零件的工程號jno 1.查詢至...

7月29日打卡

1.貪心法中的小心機 挑戰p39頁貪心法,硬幣問題 其中有一步利用了乙個小心機 include include include using namespace std const int v 6 int c 6 a void solve printf d n ans int main scanf d...