一、算法实现
第一题
1.
package main import "fmt" func main() { arr := []int{1,2,3,4,5,6,7,8,9,10,11} s1 := binarySearch_1(arr,0,len(arr),11) s2 := binarySearch_2(arr,1) fmt.Println(s1,s2) } // 递归 //时间复杂度:O(log2 N)空间复杂度:O(log2N ) func binarySearch_1( arr []int, start int , end int, aim int) int { mid := (start + end) / 2 if start >= mid && arr[start] != aim{ return -1 } if arr[mid] == aim{ return mid } else if arr[mid] > aim{ return binarySearch_1(arr, start, mid -1,aim) } else if arr[mid] < aim{ return binarySearch_1(arr, mid+1, end, aim) } return -1 } // 非递归 //时间复杂度:O(log2 N)空间复杂度:O(1) func binarySearch_2(arr []int, aim int) int{ start, end := 0 , len(arr) for { fmt.Println(start, end) mid := (start+end) / 2 if start >= end{ return -1 } if arr[mid] == aim{ return mid }else if arr[mid] > aim{ end = mid }else if arr[mid]< aim{ start = mid } } }
第二题
1.链表节点结构
type Node struct { Next *Node }
//传入链表头,返回-1则不存在节点,返回其他值则存在节点,且节点位置为返回的数值
func Linkcycle_2(head *Node) int { temp, cur := head, head i := 0 for { if cur.Next == nil{ return -1 } for { if temp == cur && cur.Next == temp || temp == cur.Next{ return i + 1 }else if temp == cur { i = 0 temp = head break }else { i++ temp = temp.Next } } cur = cur.Next } }
第二题 应用开发
1.
package main import ( "fmt" "io/ioutil" "net/http" "os" "regexp" "strings" "sync" ) var re = regexp.MustCompile(`.*? `) var Urllist = [10]string{ "https://news.sina.com.cn/c/2019-09-22/doc-iicezzrq7553985.shtml", "https://news.sina.com.cn/c/2019-09-23/doc-iicezueu7812094.shtml", } func main() { //runtime.GOMAXPROCS(runtime.NumCPU()) wg := sync.WaitGroup{} for i := 0;i < 10; i++{ url := Urllist[i] if strings.TrimSpace(url) != ""{ wg.Add(1) go Geturl(url,&wg) } } wg.Wait() } func Geturl(url string,wg *sync.WaitGroup){ defer func(){wg.Done()}() resp,err := http.Get(url) if err != nil { fmt.Println("爬取失败") } content, _ := ioutil.ReadAll(resp.Body) title := strings.Split(strings.Split(re.FindString(string(content)),"")[1]," ")[0] fmt.Println(title) path := "./" + title f, err := os.Create(path) //传递文件路径 defer func(){ f.Close() }() if err != nil { //有错误 fmt.Println("err = ", err) return } f.Write(content) }
第二题 mysql
1.建立索引时,可以将status和author_id建立联合索引,update_id数据量较大,而且有可能实时更新,不适合建立索引。
查询语句如果在没有必要的情况下,可以列出要查询的字段,不要用*查询所有。将查询的条件进行调整,将update_at字段的条件放到最前面。