20201023 演算法題

2021-10-25 03:48:29 字數 2596 閱讀 4717

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

2、不要使用額外的陣列空間,你必須僅使用 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。注意這五個元素可為任意順序。

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

這個題目和之前清楚相同元素類似,都可以使用雙指標解決:

class

solution

}return i;

}}

【思路】:

1、首先定義乙個指標i,指向當前陣列中最後乙個有效的元素的後一位;

2、另外乙個指標j用於遍歷陣列元素,查詢與val不同的值;

3、如果遇到了這個值,讓當前的i指標指向的元素等於這個值,然後i指標挪動一位;

4、最終返回i索引

示例 1

:輸入:1-

>

2輸出:

false

示例 2

:輸入:1-

>2-

>2-

>

1輸出:

true

自己的做法:

class

solution

int length = list.

size()

;boolean flag =

true

;for

(int i =

0; i < length /

2; i++)}

return flag;

}}

【思路】:

1、while迴圈遍歷整個鍊錶,將其中所有的值儲存在list集合中;

2、for迴圈遍歷list/2次;

3、如果當前位置i上的元素與length - i - 1位置的元素不相等,迴圈終止,返回false;

4、否則返回true;

這個解法理解起來容易,但是它的時間和空間開銷較大;

官方的解法:

我錄製了官方給出來的動畫解法:遞迴

//語句2

}//如果currentnode結點為空,返回true之後,語句1此時也執行完了,這個方法就彈棧了

//這個currentnode指向的結點也就被釋放資源了

//而此時的這個currentnode是剛才為null的結點的前乙個結點

return

true;}

public

boolean

ispalindrome

(listnode head)

}【總結】:

1、給定兩個變數,乙個是遞迴函式外面的指標,乙個是方法的形參;

2、首先使用遞迴的做法,使得currentnode指向鍊錶中的最後乙個結點;

3、此時frontpointer指標指向的是鍊錶的第乙個結點;

4、frontpointer結點依次向後指,而currentnode指標隨著方法的彈棧,依次逆向指向結點;

5、如果兩個指標指向的結點這時候的值不相等,返回false,整個方法彈棧;

6、語句1方法的進棧彈棧規定了currentnode指標的指向,語句2則規定了遞迴函式外的frontpointer指標指向;

7、currentnode在每次方法彈棧之後都會向前挪動一位,但是frontpointer指標只有在兩個值相等的時候才挪動一次;

8、這個最終返回的結果是由所有次的對比之後的共同結果,如果當前判斷中,前面遞迴方法返回false,整個方法直接返回false;如果前面返回false,但是這一次值不相等,也返回false;

9、也就是說,只有滿足回文特徵的鍊錶最終返回true;

20201023模擬賽總結

dp 頭一次在比賽中做出來數論題qwq 寫完 t1 看 t2 看見是數學題直接自閉。看完 t3 t4 發現後面的題更自閉滾回來看 t2 首先試圖定義 dp i j k 為比了 i 場,平了 j 場,贏了 k 場的期望得分,然後發現資料範圍 n leq 2000 給自己期望乙個 0pts 當場自閉。又...

2020 10 23每天一刷

思路 用遞迴的形式,列出所有可能的情況 include util.h using namespace std void mygenerate string item,int n,vector result mygenerate item n,result 新增左括號繼續遞迴 mygenerate i...

演算法 常見演算法題

演算法題 假如有100個不相同的數,比如從1到100,怎樣使用10次取出其中的10個不同的數字,要求每個數取出的概率一樣 一開始沒有說10次,所以我說,使用乙個random函式,以時間為種子來取,當取出乙個時,做標記,下次再取到這個數時,重新取一次 然後他就說了如果只能夠取10次怎麼辦?一開始我想到...