2sum 和 3sum
LeetCode第15题3sum:
这个题和2sum一样的思路,用双指针方法来解,这个方法一般是在有序数组中使用,一个放首,一个放尾,同时向中间遍历,直到两个指针相交,完成遍历,时间复杂度也是O(n)。
3sum问题转为2sum问题,选定第一个数字i,在剩下的元素中寻找和为-i的两个元素。
java做法:
1 | class Solution { |
最大的水容量
leetcode第11题
寻找最大的容量,容量等于宽*高,遍历所有的宽度可能。两个指针从做和右出发,此时宽最大,计算容量,容量取决于最矮的木板,为了寻找更大的容量需要将更短的替换,前进。
java做法:
1 | import java.util.*; |
寻找单链表的中间元素
用两个指针同时从链表头部出发,指针一每次移动2,指针二每次移动1,当指针一的货指针一的next为null时,指针二的元素就是中间元素。
快排的划分
快速排序每次将一个元素放到合适的位置,并保证该位置左边都小于该元素,右边都大于该元素。
1 |
|
将数组划分成左边奇数右边偶数
和上边快排类似,都属于in place 交换,数组的in place(就地)交换一般得用双指针,不然数组中添加或删除一个元素,需要移动大量元素。
这时候,一般是一个指针遍历,一个指针去找可以用来交换的元素。
1 | int i = 0, j = list.length-1; |
从后删除链表第n个元素
.png)
1 | /** |
会继续补充