C 每日一題

2021-10-14 23:41:43 字數 987 閱讀 7001

題目:給定乙個陣列 nums 和乙個值 val ,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o(1) 額外空間的條件下完成,oj鏈結.

解析:我們來解析一下這個題目的做題思路,他的含義就是讓我們刪除掉陣列中的元素,然後將陣列後面的元素跟上來。最後返回刪除掉元素的陣列長度即可。比如陣列長度為 10,裡面有2個目標值,我們最後返回的長度為 8,但是返回的 8 個元素,需要排在陣列的最前面。那麼暴力解法的話則就需要兩個 for 迴圈,乙個用來找到刪除,另乙個用來更新陣列。

總體思路就是這樣的,後面的會不斷往前覆蓋。暴力解法也是不超時的,實現也不算太簡單主要需要注意兩個地方。

(1)需要先定義變數len獲取陣列長度,因為後面我們的返回的陣列長度是改變的,所以不可以用 nums.length 作為上界

(2)我們每找到乙個需要刪除的值的時候,需要i–,防止出現多個需要刪除的值在一起的情況,然後漏刪。

題目**

class

solution

i--; len--;}

}return len;}}

;

快慢指標的做法只需要乙個 for 迴圈即可解決,時間複雜度為 o(n) ,總體思路就是有兩個指標,前面乙個後面乙個,前面的用於搜尋需要刪除的值,當遇到需要刪除的值時,前指標直接跳過,後面的指標不動,當遇到正常值時,兩個指標都進行移動,並修改慢指標的值。最後只需輸出慢指標的索引即可。

// 時間複雜度:o(n)

// 空間複雜度:o(1)

class

solution

}return slowindex;}}

;

C語言每日一題(一)

當對乙個變數頻繁被讀寫時,需要反覆訪問記憶體,從而花費大量的訪問時間。為此,c語言提供了一種變數,即暫存器變數。這種變數存放在cpu的暫存器中,使用時,不需要訪問記憶體,而直接從暫存器中讀寫,從而提高效率。暫存器變數的說明符是register。對於迴圈次數較多的迴圈控制變數及迴圈體內反覆使用的變數均...

每日一題 1

題目詳情 peter喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太簡單了,於是他準備玩乙個難的遊戲。遊戲規則是在乙個n n的 裡填數,規則 對於每個輸入的n,從左上角開始,總是以對角線為起點,先橫著填,再豎著填。這裡給了一些樣例,請在樣例中找到規律並把這個n n的 列印出來吧。輸入描述 多組測試資料 資...

每日一題2018 3 21

leetcode 2 模擬十進位制運算考察單鏈表基本操作。題無難點,個人基礎需要提高。definition for singly linked list.struct listnode class solution while p while q if shi val s next null ret...