網(wǎng)絡公司簡介模板百度地圖優(yōu)化排名方法
這里寫自定義目錄標題
- 數(shù)字統(tǒng)計專題
- 題目:數(shù)組元素積的符號
- 思路分析:無需真計算,只需判斷負數(shù)個數(shù)是奇是偶
- 復雜度:時間復雜度 O ( n ) O(n) O(n)、空間復雜度 O ( 1 ) O(1) O(1)
- Go代碼
- 題目:階乘尾數(shù)0的個數(shù)
- 思路分析:2和5能湊出1個0,而2出現(xiàn)的次數(shù)一定多于5,所以統(tǒng)計5的出現(xiàn)次數(shù)即可
- 復雜度:時間復雜度 O ( l o g n ) O(logn) O(logn)、空間復雜度 O ( 1 ) O(1) O(1)
- Go代碼
- 溢出問題專題
- 題目:整數(shù)反轉
- 思路分析:依次除10得到余數(shù)進行值組裝,注意溢出問題
- 復雜度:時間復雜度 O ( l o g n ) O(log n) O(logn)、空間復雜度 O ( 1 ) O(1) O(1)
- Go代碼
- 題目:字符串轉換整數(shù) (atoi)
- 思路分析:去除空格 + 確定正負 + 讀取數(shù)值 + 判斷溢出
- 復雜度:時間復雜度 O ( n ) O(n) O(n)、空間復雜度 O ( 1 ) O(1) O(1)
- Go代碼
- 題目:回文數(shù)
- 解法1:反轉數(shù)字后對比是否一致,反轉過程注意溢出問題
- 解法2:僅反轉一半位數(shù)后對比是否一致,對比過程注意奇數(shù)位數(shù)的問題,但不用考慮溢出問題了(優(yōu)化解法1)
- 進制專題
- 題目:七進制數(shù)
- 思路分析:依次出7的余數(shù),拼接后反轉,注意拼接時負號要追加上
- 復雜度:時間復雜度 O ( l o g ∣ n ∣ ) O(log |n|) O(log∣n∣)、空間復雜度 O ( l o g ∣ n ∣ ) O(log |n|) O(log∣n∣)
- Go代碼
- 題目:進制轉換
很多數(shù)學相關算法的關鍵在于找到怎么通過最簡潔的方式來解決問題,而不是硬算。
數(shù)字統(tǒng)計專題
題目:數(shù)組元素積的符號
題目鏈接:LeetCode-1822. 數(shù)組元素積的符號
思路分析:無需真計算,只需判斷負數(shù)個數(shù)是奇是偶
復雜度:時間復雜度 O ( n ) O(n) O(n)、空間復雜度 O ( 1 ) O(1) O(1)
Go代碼
func arraySign(nums []int) int {ret := 1for _, v := range nums {if v == 0 {return 0}if v < 0 {ret = -ret}}return ret
}
題目:階乘尾數(shù)0的個數(shù)
題目鏈接:LeetCode-面試題 16.05. 階乘尾數(shù)
思路分析:2和5能湊出1個0,而2出現(xiàn)的次數(shù)一定多于5,所以統(tǒng)計5的出現(xiàn)次數(shù)即可
復雜度:時間復雜度 O ( l o g n ) O(logn) O(logn)、空間復雜度 O ( 1 ) O(1) O(1)
Go代碼
func trailingZeroes(n int) int {num := 0for n > 0 {n = n/5num += n}return num
}
溢出問題專題
題目:整數(shù)反轉
題目鏈接:LeetCode-7. 整數(shù)反轉
思路分析:依次除10得到余數(shù)進行值組裝,注意溢出問題
復雜度:時間復雜度 O ( l o g n ) O(log n) O(logn)、空間復雜度 O ( 1 ) O(1) O(1)
Go代碼
func reverse(x int) int {res := 0for x != 0 {// 獲得末尾數(shù)字num := x%10// 判斷是否大于最大整數(shù)if res > 0 && res > (math.MaxInt32-num)/10 {return 0 }// 判斷是否小于最小整數(shù)if res <0 && res < (math.MinInt32-num)/10 {return 0}res = res*10 + numx = x/10}return res
}
題目:字符串轉換整數(shù) (atoi)
題目鏈接:LeetCode-8. 字符串轉換整數(shù) (atoi)
思路分析:去除空格 + 確定正負 + 讀取數(shù)值 + 判斷溢出
復雜度:時間復雜度 O ( n ) O(n) O(n)、空間復雜度 O ( 1 ) O(1) O(1)
Go代碼
func myAtoi(s string) int {if len(s) == 0 {return 0}// 去除前面空格for i, v := range s {if v != ' ' {s = s[i:]break}}if len(s) == 0 {return 0}// 確定正負sign := 1if s[0] == '-' || s[0] == '+' {if s[0] == '-' {sign = -1}s = s[1:]}res, v := 0, 0length := len(s)// 讀取數(shù)值for i:=0; i<length; i++ {if s[i] < '0' || s[i] > '9' {return res}v = int(s[i]-'0')// 判斷越界if res > (math.MaxInt32-v)/10 {return math.MaxInt32}if res < (math.MinInt32+v)/10 {return math.MinInt32}res = res * 10 + sign * v}return res
}
題目:回文數(shù)
題目鏈接:LeetCode-9. 回文數(shù)
解法1:反轉數(shù)字后對比是否一致,反轉過程注意溢出問題
復雜度:時間復雜度 O ( l o g n ) O(log n) O(logn)、空間復雜度 O ( 1 ) O(1) O(1)
Go代碼
func isPalindrome(x int) bool {if x < 0 {return false}num := 0oldx := xnewx := 0for x != 0 {num = x%10 //尾數(shù)if newx > (math.MaxInt32-num)/10 || newx < (math.MinInt32-num)/10 {return false}newx = newx*10 + numx = x/10}if newx == oldx {return true}return false
}
解法2:僅反轉一半位數(shù)后對比是否一致,對比過程注意奇數(shù)位數(shù)的問題,但不用考慮溢出問題了(優(yōu)化解法1)
復雜度:時間復雜度 O ( l o g n ) O(log n) O(logn)、空間復雜度 O ( 1 ) O(1) O(1)
Go代碼
func isPalindrome(x int) bool {// 負數(shù) 和 余數(shù)是0但是本身不是0 時if x < 0 || (x%10==0 && x != 0) {return false}num := 0// 反轉一半for x > num {num = num*10 + x%10x = x/10}// 考慮奇位數(shù)時,忽略中間數(shù),比如12321 中的3if x == num || x == num/10 {return true}return false
}
進制專題
題目:七進制數(shù)
題目鏈接:LeetCode-504. 七進制數(shù)
思路分析:依次出7的余數(shù),拼接后反轉,注意拼接時負號要追加上
復雜度:時間復雜度 O ( l o g ∣ n ∣ ) O(log |n|) O(log∣n∣)、空間復雜度 O ( l o g ∣ n ∣ ) O(log |n|) O(log∣n∣)
Go代碼
func convertToBase7(num int) string {if num == 0 {return "0"}sign := 1if num < 0 {sign = -1// 絕對值numnum = -1 * num}res := make([]byte, 0)var v bytefor num != 0 {// 余數(shù)依次是反轉的原值v = byte(num%7 + '0')res = append(res, v)num = num/7}if sign < 0 {res = append(res, '-')}reverseArr(res, 0, len(res)-1)return string(res)
}
func reverseArr(arr []byte, left int, right int) {if left >= right {return}for left <= right {arr[left], arr[right] = arr[right], arr[left]left++right--}
}
題目:進制轉換
題目鏈接:LeetCode-
思路分析:
復雜度:時間復雜度 O ( l o g n ) O(logn) O(logn)、空間復雜度 O ( 1 ) O(1) O(1)
Go代碼
在這里插入代碼片