zoukankan      html  css  js  c++  java
  • go语言学习 11/5/2019

    闭包非递归斐波那契:

    package main
    
    import "fmt"
    
    func main() {
    	var result = fibonacci()
    	for i := 0; i <= 10; i++ {
    		fmt.Printf("fibonacci(%d) is: %d
    ", i, result(i))
    	}
    }
    
    func fibonacci() func(int) int {
    	a = 0
    
    	return func(delta int) int {
    		defer func() {
    			a,b = b, a+b
    		}()
    		return b
    	}
    }
    

     斐波那契闭包调试代码:

    func fibonacci() func(int) int {
    	a,b := 0,1
    
    	return func(delta int) int {
    		defer func() {
    			a,b = b, a+b
    		}()
    		_, file, line, _ := runtime.Caller(1)
    		log.Printf("%s:%d", file, line)
    		return b
    	}
    
    }
    

      

     可以看到for循环中闭包调试的代码并不是同步的,中间的原理就不得而知了

    计算运行时间

    start := time.Now()
    fibonacci()
    end := time.Now()
    delta := end.Sub(start)
    fmt.Printf("longCalculation took this amount of time: %s
    ", delta)
    

      快速排序:

    func quickSort(nums []int,left,right int) {
    	if left >= right{
    		return
    	}
    	index :=partition(nums,left,right)
    	quickSort(nums,left,index - 1)
    	quickSort(nums,index + 1,right)
    }
    func partition(nums []int,left,right int) int{
    	baseNum := nums[left]
    	for left < right{
    		for (nums[right] >= baseNum && right > left){
    			right--
    		}
    		nums[left] = nums[right]
    		for (nums[left] <=baseNum && right > left) {
    			left++
    		}
    		nums[right] = nums[left]
    	}
    	nums[right] = baseNum
    	return right
    }
    

      

    -给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    func twoSum(nums []int, target int) []int {
    	var mapNeed map[int]int
    	mapNeed = make(map[int]int)
    
    	for num0:=0;num0<=len(nums);num0++{
    		var num = target - nums[num0]
    		if v,ok :=mapNeed[num];ok{
    			return []int{v,num0}
    		}else{
    			mapNeed[nums[num0]]=num0
    
    		}
    	}
    	return []int{}
    }
    

      

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    var c int
    func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    	if l1==nil&&l2==nil&&c==0{
    		return nil
    	}
    	if l1!=nil{
    		c+=l1.Val
    		l1=l1.Next
    	}
    	if l2!=nil{
    		c+=l2.Val
    		l2=l2.Next
    	}
    	var cur ListNode
    	cur.Val= c%10
    	c=c/10
    	cur.Next=addTwoNumbers(l1,l2)
    	return &cur
    }
    

      给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度

    func lengthOfLongestSubstring(s string) int {
    	var maxsize,base int
    	var dict = [256]int{}
    	for key:=0;key<len(s);key++{
    		var i = s[key]
    		if dict[i] >base{
    			base = dict[i]
    		}
    		dict[i] = key + 1
    		if maxsize<key-base+1{
    			maxsize	 =  key-base+1
    		}
    	}
    	return maxsize
    }
    

      

  • 相关阅读:
    基于spec评论作品
    Alpha版发布
    软件工程第七次作业
    软件工程第六次作业
    软件工程第五次作业
    django-rest-framework笔记-序列化篇
    django restframework系列笔记
    rpyc 文件监控
    python subprocess select 读取
    Python 多线程 类和方法
  • 原文地址:https://www.cnblogs.com/ygy1997/p/11796922.html
Copyright © 2011-2022 走看看