for i := 1; i < 5; i++ {
sum += i
}
for i, s := range strings {
fmt.Println(i, s)
}
转换
int转string
string:=strconv.Itoa(int)
int64转string
string:=strconv.FormatInt(int64,10)
string转int
int,err:=strconv.Atoi(string)
string转int64
int64, err := strconv.ParseInt(string, 10, 64)
排序
sort.Ints(intList)
sort.Slice(sArr, func(i, j int) bool {
return sArr[i] < sArr[j]
})
// 2d
sort.Slice(n, func(i, j int) bool {
for x := range n {
if n[i][x] == n[j][x] {
continue
}
return n[i][x] < n[j][x]
}
return false
})
json序列化和反序列化
value := "{\"FailTime\":1571909067,\"FailReason\":\"2\"}"
var failsInfo FailsInfo
err := json.Unmarshal([]byte(value), &failsInfo)
if err != nil {
return nil, err
}
failsInfo.FailTime
深拷贝
before := []int{2, 1, 2}
new := make([]int, len(before))
copy(new, before)
pop
x, a = a[len(a)-1], a[:len(a)-1]
python
排序
mylist.sort()
逆序for
for i in range(len(nums)-1, -1, -1):
...
一些算法
清除二进制位中最右边的1
n &= n - 1
如,统计二进制有多少个1
func count1(n int) int {
var res int
for n != 0 {
n &= n - 1
res++
}
return res
}
位运算判断奇偶
(number & 1) == 0
// 0: 偶数,1: 奇数
交换两个变量的值
a = a ^ b
b = a ^ b
a = a ^ b
两分法
var searchInsert = function(nums, target) {
const length = nums.length;
if (nums[length - 1] < target) {
return length;
} else if (length === 0) {
return 0;
}
let left = 0;
right = length - 1;
while (left < right) {
let mid = (left + right) >>> 1;
if (target > nums[mid]) {
left = mid + 1;
} else {
right = mid;
}
}
return right;
};
def binary_search(array, target):
low = 0
high = len(array)-1
while low < high:
mid = (low+high) >> 1
if target > array[mid]:
low = mid+1
else:
high = mid
return high
mid = (left+right)>>1
即使left+right整型溢出,变成负数,无符号右移,能得到正数的正确结果。
mid另一种求法:
mid = left + (right-left)//2
或者用右移:
mid = left + ((right-left)>>1),记得要加括号,加减优先级比右移要高,不加要出问题。
异或
用异或,把判断结果连起来
两项真,异或结果为假;一项真,异或结果为真
中序遍历
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
stack = []
p = root
count = 0
while p is not None or stack:
while p is not None:
stack.append(p)
p = p.left
p = stack.pop()
count += 1
if count == k:
return p.val
p = p.right