1.贪心算法(学习笔记)

贪心算法:

局部最优——>整体最优

写模版

验证:对数器

会议室宣讲:会议结束时间早先安排,开始排序好之后删掉时间段重复的

单词字典拼接:使得拼接后在字典中尽可能在前面

贪心策略:1.谁在字典前面拼接时放前面(b与ba)

哈夫曼编码:

用小根堆拍好之后,拿出最小的两个结合成一个,再扔回堆里去,再拿出最小的两个结合,重复

融资问题:有初始资金,最多做的项目的限制

小根堆:花费(锁住的项目),,大根堆:利润(解锁的项目)

堆的应用:

一个数据流中,随时可以取得中位数:

大小根堆配合

1)当前给的数是否小于等于大根堆堆顶,

2)是的话,当前数字入大根堆,不是入小根堆,

3)大根堆与小根堆比size大小,大size-小size到2的话 大的堆顶去小的堆里

最终,小的N/2在大根堆,大的N/2在小根堆

N皇后问题:

是指在N*N的棋盘.上要摆N个皇后,要求任何两个皇后不同行、不同列,也不在同一条斜线上。给定一个整数n,返回n皇后的摆法有多少种。

n=1,返回1。

n=2或3,2皇后和3皇后问题无论怎么摆都不行,返回0。

n=8,返回92。

可利用位运算的限制代替record

暴力递归就是尝试

1,把问题转化为规模缩小了的同类问题的子问题

2,有明确的不需要继续进行递归的条件(base case)

3,有当得到了子问题的结果之后的决策过程

4,不记录每一个子问题的解

汉诺塔问题

三根杆,放大小碟子

杆:form to other

P函数(I,form,to, other)

{

1.将i-1个圆盘从form—>other

(调用函数P(i-1, from, other, to))

2.第I个圆盘从form—>to

(直接打印)

3.将i-1个从other—>to

(调用函数P(i-1, other, to, from))

}

打印一个字符串的全部子序列,包括空字符串:求子集

每个字符两条路,要或不要,构成一棵满树

打印一个字符串的全部排列:(leetcode46)

str[i…]范围上,所有的字符都可以在i位置上,后续都去尝试

str[0, …, i] 范围上,是之前做好的选择——>str

纸牌左右:

给定一个整型数组arr,代表数值不同的纸牌排成一条线。 玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿,但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。

leetcode(486)

自己先::

int f(arr, L, R)

if L==R

得分:arr(L)+S(am, L+1, R). S:后手函数

   或者 arr(R)+S(am, L, R-1)

别人先:后手函数S为

f(arr, L+1, R)和f(arr, L, R-1)中的小的

给一个栈,将它逆序,不能申请额外数据结构,只能递归

定义f函数:移除栈底元素并返回该值

Reverse函数:若栈为空,return,然后调用f函数,再执行reverse函数,压入栈中

规定1和A对应、2和B对应、3和C对应...

那么一个数字字符串比如"111",就可以转化为"AAA"、"KA" 和"AK"。

给定一个只有数字字符组成的字符串str,返回有多少种转化结果。(leetcode42)

0—i-1位置已经确定

  1. [i]==0?返回:无效,没有办法比较
  2. [i]!=0 [i]>3 , i位置只能是C,没办法与i+1位置结合;
  3. [i] ==1 ,第一种:i自己作为单独的部分,后续有多少种方法;第二种:i位置与i+1位置结合(前提是i+1位置没有超过str的长度),看i+2后续有多少种
  4. [i] ==2, 第一种:i自己作为单独的部分,后续有多少种方法;第二种:i位置与i+1位置结合(前提是i+1位置没有超过str的长度,并且str[i+1]的数大于等于0,小于6),看i+2后续有多少种

给定两个长度都为N的数组weights和values, weights [i]和values[i]分别代表i号物品的重量和价值。给定一个正数bag,表示一个载重bag的袋子,你装的物品不能超过这个重量。返回你能装下最多的价值是多少?

当前货物i得重量和剩余容量做比较

选择:可变参数形式少

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值