左右指针
一、概念
所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行,一快一慢。
左右指针在我们算法中使用是非常广泛的,一般解决问题包括但是不仅限于两数之和类问题,翻转数组,双指针问题又可以进行细分为,滑动窗口,二分查找等具体的技巧。但是滑动窗口,二分查找,已经开始自立门派,自成体系了。
所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行,一快一慢。
左右指针在我们算法中使用是非常广泛的,一般解决问题包括但是不仅限于两数之和类问题,翻转数组,双指针问题又可以进行细分为,滑动窗口,二分查找等具体的技巧。但是滑动窗口,二分查找,已经开始自立门派,自成体系了。
什么叫做快慢指针呢?就是两指针都是从头开始,一起向某个方向移动,这个在链表中使用更加多,但是在数组中用到的也是非常多的,这一类题目基本上有个比较明显的特征,就是原地修改数组,比如原地去重,原地修改,当我们遇到这些关键字就需要注意了我们需要用到快慢指针。
关于使用快慢指针还有一点比较重要,就是快指针代表着什么,慢指针表示着什么,当它们相遇时我们需要做什么。
基本上就是统一的思路
二分查找的基本思想是很简单的可能很多小学生都可以思考出来,但是实际去 写又会遇到很多问题。因为里面有很多细节需要注意。一不小心就会写失败。
二分查找的基本算法思想为:通过确定目标元素所在的区间范围,反复将查找范围减半,直到找到元素或找不到该元素为止。
target == nums[mid]找到目标索引target < nums[mid]目标位置在[left, mid-1], right=mid-1target > nums[mid]目标位置在[mid+1, right],left=mid+1假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。
回文字符串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。