企业网站制作及cms技术,wordpress站点 HTML,做公司的网站有哪些东西吗,小程序模板页这里写自定义目录标题 数字统计专题题目#xff1a;数组元素积的符号思路分析#xff1a;无需真计算#xff0c;只需判断负数个数是奇是偶复杂度#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目#xff1a;阶乘尾数0的个数思路分析数组元素积的符号思路分析无需真计算只需判断负数个数是奇是偶复杂度时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目阶乘尾数0的个数思路分析2和5能凑出1个0,而2出现的次数一定多于5所以统计5的出现次数即可复杂度时间复杂度 O ( l o g n ) O(logn) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 溢出问题专题题目整数反转思路分析依次除10得到余数进行值组装注意溢出问题复杂度时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目字符串转换整数 (atoi)思路分析去除空格 确定正负 读取数值 判断溢出复杂度时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目回文数解法1反转数字后对比是否一致反转过程注意溢出问题复杂度时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 解法2仅反转一半位数后对比是否一致对比过程注意奇数位数的问题但不用考虑溢出问题了优化解法1复杂度时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 进制专题题目七进制数思路分析依次出7的余数拼接后反转注意拼接时负号要追加上复杂度时间复杂度 O ( l o g ∣ n ∣ ) O(log |n|) O(log∣n∣)、空间复杂度 O ( l o g ∣ n ∣ ) O(log |n|) O(log∣n∣)Go代码 题目十进制转换为指定进制思路分析准备16进制的字符Map依次除N得到余数映射Map得到对应字符追加到数组注意负号的追加反转数组转为string复杂度时间复杂度 O ( l o g n u m ) O(log num) O(lognum)、空间复杂度 O ( l o g n u m ) O(log num) O(lognum)Go代码 很多数学相关算法的关键在于找到怎么通过最简洁的方式来解决问题而不是硬算。 数字统计专题
题目数组元素积的符号
题目链接LeetCode-1822. 数组元素积的符号
思路分析无需真计算只需判断负数个数是奇是偶
复杂度时间复杂度 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
}题目阶乘尾数0的个数
题目链接LeetCode-面试题 16.05. 阶乘尾数
思路分析2和5能凑出1个0,而2出现的次数一定多于5所以统计5的出现次数即可
复杂度时间复杂度 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
}溢出问题专题
题目整数反转
题目链接LeetCode-7. 整数反转
思路分析依次除10得到余数进行值组装注意溢出问题
复杂度时间复杂度 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 {// 获得末尾数字num : x%10// 判断是否大于最大整数if res 0 res (math.MaxInt32-num)/10 {return 0 }// 判断是否小于最小整数if res 0 res (math.MinInt32-num)/10 {return 0}res res*10 numx x/10}return res
}题目字符串转换整数 (atoi)
题目链接LeetCode-8. 字符串转换整数 (atoi)
思路分析去除空格 确定正负 读取数值 判断溢出
复杂度时间复杂度 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)// 读取数值for i:0; ilength; 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.MinInt32v)/10 {return math.MinInt32}res res * 10 sign * v}return res
}题目回文数
题目链接LeetCode-9. 回文数
解法1反转数字后对比是否一致反转过程注意溢出问题
复杂度时间复杂度 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 //尾数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仅反转一半位数后对比是否一致对比过程注意奇数位数的问题但不用考虑溢出问题了优化解法1
复杂度时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPalindrome(x int) bool {// 负数 和 余数是0但是本身不是0 时if x 0 || (x%100 x ! 0) {return false}num : 0// 反转一半for x num {num num*10 x%10x x/10}// 考虑奇位数时忽略中间数比如12321 中的3if x num || x num/10 {return true}return false
}进制专题
题目七进制数
题目链接LeetCode-504. 七进制数
思路分析依次出7的余数拼接后反转注意拼接时负号要追加上
复杂度时间复杂度 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 {// 余数依次是反转的原值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]leftright--}
}题目十进制转换为指定进制
给定一个十进制数Num以及需要转换的进制数N将十进制数Num转化为N进制数。Num是32为整数2N16。
思路分析准备16进制的字符Map依次除N得到余数映射Map得到对应字符追加到数组注意负号的追加反转数组转为string
复杂度时间复杂度 O ( l o g n u m ) O(log num) O(lognum)、空间复杂度 O ( l o g n u m ) O(log num) O(lognum)
Go代码
func convert(num int, n int) string {byteArr : [16]byte{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}if num 0 {return 0}sign : 1if num 0 {sign -1num -num}res : []byte{}var v bytefor num ! 0 {v byteArr[num%n]res append(res, v)num num/n}if sign -1 {res append(res, -)}reverse(res, 0, len(res)-1)return string(res)
}
func reverse(arr []byte, left int, right int) {if left right {return}for left right {arr[left], arr[right] arr[right], arr[left]leftright--}
}