解题算法

NO.1————哈希表Hash Map

比如解决:对应类的问题------->如此题"hash map解决一 一对应问题(链接)"

使用的是指针数组(数组的元素是是指针),每一个指针的索引表示的是一个标志,这个标志的地址链接的是它所对应的内容。

比如要表示'a' 对应一个 字符串"abcd",数组元素装入的就是'a',而改元素的地址后的链表表示的是'a'所对应的字符串"abcd"。


NO.2————滑动窗口————减少循环重复次数,数组中定长问题

比如解决:数组中k个值相加,求最值的问题等等

例题:

暴力解法:组合、相加、比较

滑动窗口技巧:

减去1、再加上3

减去4、加上4.以此类推


NO.3————回溯算法————避免多余的操作,进入一条路后发现不合适就回头

比如解决:全排列问题、八皇后问题等

例题:"1 2 3"的全排列问题

给这三个结构一般化:给每一个圈编号,编号是可以数的、名字是不可以数的。

每一层都可以看作给函数 f() 传入对应的参数

实质上就是递归:

f(0)调用f(1)

f(1)调用f(2)

f(2)调用f(3)

到达f(3)停止。

写成递归式:

在进行下一层之前,进行检查,检查是否有重复,有重复的话就不需要再呼叫下一层,直接跳过

使其具有一般性

 

NO.4 ————链表专题

 

常用的解题技巧有:

  • 快慢指针、栈————返回倒数第k个节点

  • 快慢指针——————寻找中间节点

  • 快慢指针——————验证是否存在环(拓展:求环的长度)

 

 

 

 

 


 

NO.5 ————求解农夫过桥问题(链接)————四种解决方案:过程回溯法、图的遍历、状态回溯法、状态队列搜索法

问题:一个农夫带着一匹狼、一只羊、一颗白菜要过河,只有一条船而且农夫每次最多只能带一个动物或物品过河,并且当农夫不在的时候狼会吃羊,羊会吃白菜,列出所有安全将所有动物和物品带过河的方案。

1. 过程回溯法

       把人、狼、羊、白菜看成A、B、C、D。过河的时候从ABCD中选两个过河,在

选一个回来。若发生狼跟羊、羊跟白菜在同一个岸边,且农夫不在场,则回溯.

 

2. 图的遍历

       设从南岸到北岸,在南岸ABCD的各个状态是(用二进制表示):0000,在

北岸的时候各个状态是:1111。所以过河问题就是从0000起始状态到1111最终状态的

过程。易得,总共有16中状态。然后把每一种状态看成图的一个结点,把可以连通的

结点用有向边连起来,就构成的一个有向图。从0000这个结点遍历(深度优先或者广

度优先)图,遍历到1111结点则找到解。

*

3. 状态回溯法

       设从南岸到北岸,在南岸ABCD的各个状态是(用二进制表示):0000,在

北岸的时候各个状态是:1111。所以过河问题就是从0000起始状态到1111最终状态的

过程。易得,总共有16中状态。从第一种状态0000开始搜索,搜索当前状态下可以到达的

状态,搜索到一个则把这个状态看成当前状态,继续搜索。若出现当前状态搜索无可到达

的状态或已遍历所有搜索出来的状态,则回溯。直到到达1111状态。

 

4. 状态队列搜索法

       跟思路3类似,只是搜索的方式不一样。思路3中用栈的思想进行深度搜索

这里采用队列的思想进行广度搜索。

 

需要熟悉掌握位运算符:

左移<<1001  →   0010
右移>>1100  →   1110    ;     0101   →    0010
按位与&

1100 & 0101  =  0100   ;  1110 & 1100  =  1100

按位或 |

1100  |  0101  =  1101   ;   1110  |  1100 =  1110


 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值