剑指offer算法思想

Posted lpd1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer算法思想相关的知识,希望对你有一定的参考价值。

3. 数组中重复的数字

算法步骤:遍历该数组nums,从第一个数字开始,判断

1)如果nums[i]和下标的值i一样,就跳到下一个数字

2)如果不一样,那么就判断,nums[i]是否等于nums[nums[i]],如果等于,输出该数字nums[下标值],

如果不等于,那么就调整nums[i]和nums[nums[i]]的顺序。继续重复1)和2)

 

4. 二维数组中的查找

算法步骤:

1)获取行数rows和列数cols

2)确定从第一行r和最后一列c开始,即从右上角开始

3)while循环,行数r<=rows-1&&c>=0

4)如果target等于matric[r][c],直接输出答案。如果target大于matric[r][c],行r增加,如果target小于matric[r][c],列减少,c--。

 

5. 替换空格

算法步骤:

1)得到原长度下标p1

2)然后遍历字符串里面的空格,如果是有空格,那么在这个字符串后面加多两个空格,最终是为了得到替代之后的字符长度数量下标p2

3)while(p1>=0&&p2>p1),获取p1下标的值c,并且从右往左遍历完,如果c为空格,那么就往该字符串的P2 指向的位置依次填充 02%,如果不是空格,就直接添加c

 

6. 从尾到头打印链表

算法思路:

1)往栈加数据

2)设置一个集合Arraylist

3)出栈,并且把数据加到该集合中

 

9. 用两个栈实现队列

算法思路:

1)设立两个栈,一个负责传入in,一个负责出栈out

2)入栈方法,就是使用in添加数据

3)出栈方法:

①如果out为空,那么我们就要判断in是否为空,如果不为空,那么我们就取出in的数据,传入out栈

②如果经过上述处理,out还为空,那么就输出queue为空

③return out.pop()

 

以上是关于剑指offer算法思想的主要内容,如果未能解决你的问题,请参考以下文章

解数独算法的实现——剪枝优化

贪心思想

归并排序

floyd算法 是动态规划的思想吗

算法导论—分治法思想动态规划思想贪心思想

剑指offer第二版和专项突击版有啥区别