小灰的算法之旅——面试算法以及算法应用

一、如何判断链表有环

1. 问题

2. 方法

1)法1 (最笨)

2)法2(用集合存储)

3)法3 (最好)

3. 拓展

1)如果链表有环,怎么求环的长度?

2)如果链表有环,如何求入环节点?

二、最小栈的实现

1. 问题

2. 方法(辅助栈)

3. 代码实现

三、求最大公约数

1. 问题

2. 方法

1)暴力枚举

2)辗转相除法

3)更相减损术(避免数据大的取模运算复杂的问题)

4)辗转相除和更相减损结合(与运算判断奇偶)

更相减损术虽然避免了两个整数较大时的取模运算性能差的问题,但是依靠两数求差的方式递归,无疑会增加运算次数,如何实现既可以避免大整数取模,又可以减少运算次数呢?

3. 复杂度

四、判断一个数是否为2的整数次幂

1. 问题

2. 方法

1)暴力枚举

2)改进:乘法改为位运算

3)用与运算判断(重点)

五、无序数组排序后的最大相邻差

1. 问题

2. 方法

1)暴力枚举

2)用计数排序的思想

3)用桶排序的思想

六、用栈实现队列

1. 问题

2. 方法

七、寻找全排列的下一个数

1. 问题

2. 方法

八、删除k个数字后的最小值

1. 问题

2. 方法

1)代码1

2)优化

九、如何实现大整数相加

1. 问题

2. 方法

十、求解金矿问题(背包问题)

1. 问题

2. 方法

1)贪心算法(局部最优未必整体最优)

2)动态规划

如何避免递归低效?

自底向上求解:

十一、寻找缺失的整数

1. 问题

2. 方法

1)解法1

2)解法2

3)解法3

3. 问题拓展1(异或运算找奇偶次数字)

问题:

解法:

4. 问题拓展2 (有两个奇数次的数字)

问题:

解法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值