剑指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--。

扫描二维码关注公众号,回复: 5549308 查看本文章

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()

猜你喜欢

转载自www.cnblogs.com/lpd1/p/10540516.html