【第二天】剑指offer,每日一刷

开干,每天一刷

1.剑指 Offer 10- I. 斐波那契数列

func fib(n int) int {
	f0, f1 := 0, 1
	for i := 0; i < n; i++ {
		f0, f1 = f1, (f0+f1)%1000000007
	}
	return f0
}

这道题也没什么难度,一是取模要注意一下,二是如果使用递归的话,实际上会超时,我就超时了,下面这种写法不合适

func fib1(n int) int {
	// 实现一个数列
	if n == 0 {
		return 0
	}
	if n == 1 {
		return 1
	}
	return (fib(n-1) + fib(n-2)) % 1000000007
}

2.剑指 Offer 10- II. 青蛙跳台阶问题

我本来不会这一题的,但是我发现这两题题号一样,所以考察的是同一个知识点,也就是飞博,但是7步台阶明显是第八个飞博,那么我返回f1就是了

func numWays(n int) int {
	f0, f1 := 0, 1
	for i := 0; i < n; i++ {
		f0, f1 = f1, (f0+f1)%1000000007
	}
	return f1
}

果然过了^_^,笑死我了

3.剑指 Offer 11. 旋转数组的最小数字

没整明白题目啊,大概就是告诉我们两个分开的数组段是有序的,首先来个力大砖飞版本

func minArray(numbers []int) int {
	sort.Ints(numbers)
	return numbers[0]
}

一眼过,题解说有用二分法的,我试试看,两个分开的数组段都是有序的就好写

func minArray(numbers []int) int {
    left :=0
    right :=len(numbers)-1
    for left<right{
    	mid :=left+(right-left)>>1
    	if numbers[mid]>numbers[right]{
    		left = mid+1
		}else if numbers[mid]<=numbers[right] {
			right = right-1
		}
	}
	return numbers[left]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值