必拿offer系列 演算法 陣列 二

2021-10-01 18:33:47 字數 2674 閱讀 9245

leetcode

給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。

示例:輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0] 說明:

必須在原陣列上操作,不能拷貝額外的陣列。 儘量減少操作次數。

這道題是雙指標問題無疑了,基本上陣列的題都跟雙指標分不開,基本上 雙指標問題都要用到先排序,不過這個題不需要。

func movezeroes(nums int)  

j++}

// 這個迴圈完畢以後,i的下下標豆薯屬於非零的了,那麼可以說i後面的下標都是0了,但是

// 目前還沒有。因為有一些記憶體位址還是其它值的,

// 比如這樣 [1,3,12,3,12]

// 那麼我們要做的就是把i後面的索引變成0就ok了。對吧對吧。

for i < len(nums)

}

這道題的解題思路就是使用兩個指標,然後j肯定是比i快的,最起碼是一樣快,所以不用擔心i的內容會覆蓋掉j,那麼j前面的資料被i給覆蓋了, 然後當覆蓋到i結束,就是說0 - i 這個記憶體空間已經是正確的所有資料了,那麼在i後面的資料儘管還有值,但是這些值其實已經被i這個指標提取到了前面 所以說i後面的索引值的記憶體空間是無用的,那麼我們可以在i到len的這個空間內將資料變為0.

leetcode

在matlab中,有乙個非常有用的函式 reshape,它可以將乙個矩陣重塑為另乙個大小不同的新矩陣,但保留其原始資料。

給出乙個由二維陣列表示的矩陣,以及兩個正整數r和c,分別表示想要的重構的矩陣的行數和列數。

重構後的矩陣需要將原始矩陣的所有元素以相同的行遍歷順序填充。

如果具有給定引數的reshape操作是可行且合理的,則輸出新的重塑矩陣;否則,輸出原始矩陣。

示例 1:

輸入:

nums = 

[[1,2],

[3,4]]

r = 1, c = 4

輸出:

[[1,2,3,4]]

解釋: 行遍歷nums的結果是 [1,2,3,4]。新的矩陣是 1 * 4 矩陣, 用之前的元素值一行一行填充新矩陣。 示例 2:

輸入:

nums = 

[[1,2],

[3,4]]

r = 2, c = 4

輸出:

[[1,2],

[3,4]]

解釋: 沒有辦法將 2 * 2 矩陣轉化為 2 * 4 矩陣。 所以輸出原矩陣。 注意:

給定矩陣的寬和高範圍在 [1, 100]。 給定的 r 和 c 都是正數。

func matrixreshape(nums int, r int, c int) int 

result := make(int,r)

count,col := 0,len(nums[0])

for i := range result

}return result

}

這道題我有兩個思路 乙個就是 先構造新的result然後開始遍歷這個result的陣列, 然後再使用取商和取餘數的方式把老陣列的內容乙個乙個的取到新的資料結構中。

第二個思路 就是使用乙個queue 然後把資料先導入進去,然後便利新的陣列的時候乙個乙個加進去就ok了, 但是使用queue空間複雜度就大了,不如直接取餘數和商。這種需要重新構造的陣列一般取餘數和取商是最好的方式了, 只需要使用乙個一直增加的下標索引,然後再加上每個子陣列的長度,就ok 了,這種取餘的手法在迴圈stack queue的時候都有用到。 我感覺 這種取餘的手法非常常見也非常重要

下標跟陣列長度取商可以發現是幾倍於這個陣列,取餘可以發現是在這個陣列長度的具體哪個索引處

leetcode

給定乙個二進位制陣列, 計算其中最大連續1的個數。

示例 1:

輸入: [1,1,0,1,1,1] 輸出: 3 解釋: 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3. 注意:

輸入的陣列只包含 0 和1。 輸入陣列的長度是正整數,且不超過 10,000。

解法一雙指標解法

func findmaxconsecutiveones(nums int) int else }}

return count

}

通用動態規劃的寫法按照步驟分析,每一次要麼是1 要麼是0 而且按照步驟分析前後並沒有影響的關係。 如果看不懂就算了可以去使用第一種解法。

func findmaxconsecutiveones(nums int) int 

res := 0

result := make(int,len(nums))

result[0] = nums[0]

for i := 1; i < len(result);i++ else

}for _,x := range result

}return res

}

本篇文章由一文多發平台artipub自動發布

劍指offer演算法 陣列遍歷

題目描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。分析與實現 在二位陣列中查詢乙個數,我們可以一次遍歷進行與目標資料比較得出,但這種方法的複雜度很大 ...

劍指offer系列(二維陣列中的查詢)

第二題二維陣列中的查詢 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 由於陣列是每一行遞增,每一列遞增 所以乙個數,它的左邊是比它小的,下邊是比它大的...

《劍指offer》系列 二維陣列中的查詢

今後的你一定會感謝現在努力的自己。在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。public class test02 else if element array i j else...