算法学习
3、
package main
import (
"fmt"
)
func max(x int, y int) int {
if x < y {
return y
}
return x
}
// 窗口滑动 解决子串问题
// 获取最长非重复子串 示例: "acdfeabac" > "acdfe"
func getLongestNotRepeat(s string) int {
l := 0
r := 0
slen := len(s)
currentLen := 1
currentShou := s[l]
for ;r<slen;r++ {
if l >= r {
continue
}else if currentShou == s[r] {
fmt.Println(s[l:r])
currentLen = max(currentLen, r-l)
l++
}
}
return currentLen
}
func climbStairs(n int) int {
result := 0
if n <= 0 {
return 0
}
for _,step := range []int{1,2} {
if n-step == 0 {
result++
} else if n-step >0 {
result = result + climbStairs(n-step)
} else if n-step <0 {
continue
}
}
return result
}
type ListNode struct {
data int
Next *ListNode
}
func main() {
a := getLongestNotRepeat("acdfeabac")
fmt.Println(a)
fmt.Println(climbStairs(10))
}
2、读取大文件(5G/10G/1T)
for line in fp.readlines(): #如果line很长时,不合适
for a in fp.read(block_size): # 按块读取
1. threading.Semaphore(value=1) 线程信号量,可以用来控制线程线程的阻塞和释放
sm.acquire() 获取一个信号量,信号量-1,不够-1,则线程阻塞
sm.release() 释放一个信号量,信号量+1
示例如下,控制三个线程的执行顺序:
# -*- coding: utf-8 -*-
import threading
import time
sm0 = threading.Semaphore()
sm1 = threading.Semaphore(0)
sm2 = threading.Semaphore(0)
a = 0
def print1():
global a
while True:
sm1.acquire()
if a % 2 == 1:
print(a, "----", a, threading.currentThread().name)
a = a + 1
time.sleep(1)
sm0.release()
def print2():
global a
while True:
sm2.acquire()
if a % 2 == 0:
print(a, "----", a, threading.currentThread().name)
a = a + 1
time.sleep(1)
sm0.release()
def print0():
global a
while True:
sm0.acquire()
print(0, "----", a)
time.sleep(1)
if a % 2 == 1:
sm1.release()
else:
sm2.release()
if __name__ == '__main__':
t1 = threading.Thread(target=print1)
t0 = threading.Thread(target=print0)
t2 = threading.Thread(target=print2)
t0.start()
t1.start()
t2.start()

浙公网安备 33010602011771号