程式設計師高階之演算法練習 一

2022-08-23 23:03:19 字數 2041 閱讀 9163

可能很多移動端程式設計的同學聽到演算法就感到恐懼,認為我不會演算法也能開發呀。確實,不會演算法,也能應對一般的工作。但是和大牛之間的差距就是,可能別人3行**實現的東西,你卻要寫10多行,並且效能比別人差。那麼,讓我們來學習一些演算法吧。

演算法的學習最簡單的方式就是多練習,找乙個提供演算法練習的**,思考,編碼,驗證,最後再看看別人的思路。

本系列的題目來自leetcode。ide採用的xcode,筆者使用的是swift

(ps:以下練習中**實現部分並不是唯一解答方法,僅供參考)

題目鏈結

題目大意:給定乙個整數陣列,找出滿足兩個數字相加 等於 目標數的兩個數字的索引,並且返回。

例如:

nums = [2, 7, 11, 15], target = 9 ,

因為 nums[0] + nums[1] = target,

所以 return [0, 1]

**實現:

func twosum(_ nums:[int], _ target:int) -> [int]? else

}return nil

}

題目鏈結

題目大意:使用鍊錶實現兩個數字相加

例如:

12 + 13 = 25

**實現:

public class listnode 

}public class solution

func helper(_ l1:listnode?, _ l2:listnode?, _ carry: int) -> listnode?

if p == nil && q != nil

if p != nil && q == nil

let sum = (p?.val)! + (q?.val)! + carry

let curr = listnode(sum % 10)

curr.next = helper(p?.next, q?.next, sum/10)

return curr

}}var l1:listnode?

var l2:listnode?

l1 = listnode(12)

l2 = listnode(13)

let s = solution()

let result1 = s.addtwonumbers(l1, l2)

思路:

按照小學加法原理,從末尾對齊相加,滿十進位。技巧在於如何處理不同長度的兩個數字,以及進製和最高位的判斷。這裡對於不同長度的數字,我們通過在較短的數字前面新增零來保證每一位都能相加。主要分為以下3個要點:

題目鏈結

題目大意:給定乙個字串,找出其中最長的沒有出現重複字元的連續子串的長度。

例如:

"abcabcbb" 最長的不重複字元子串是"abc",長度為3;

"bbbbb" 最長的不重複字元子串是"b",長度為1;

"pwwkew" 最長的不重複字元子串是"wke",長度為3;

**實現:

func lengthoflongestsubstring(_ s:string) -> int 

var map = [character: int]()

var result = 0

var j = 0

for (i, charactor) in s.characters.enumerated()

map[charactor] = i

result = max(result, i-j+1)

}return result

}

思路:

本題目主要有3個注意點:

最長的;

連續的;

沒有重複的字元;

如果發現有錯誤的地方,歡迎各位指出,謝謝!

程式設計師演算法練習二

無重複字元的最長子串 給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而...

程式設計師演算法練習四

給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返回 0。常...

程式設計師怎麼高階

mvc框架了解乙個就可以,不用花更多精力去精通每乙個mvc框架,因為mvc框架太多,學到的只是框架用法,各個框架間用法不通用,時間成本並不划算。php不要光會用,至少要去了解下底層原理,對於寫出來高質量高效能 有一定幫助。最主要socket程式設計 多程序程式設計都要去熟悉一下。這些屬於底層原理,學...