1.二分查找
这个问题不难,你想要找到其中一个数,那就只能在数组的两边找到最大的索引和最小的索引,然后找到中间的那个索引,然后让这个索引上的数与目标数比较,如果目标数大于该数,就代表最左边的索引需要增加,相反如果目标书小于该数,就代表最右边的数需要减少,然后查找就欧克了
但是需要注意的是,别忘了咱还需要判断这个数是否在这个数组中。
上代码
2.移除元素
这一个题目的话,咱可以使用双指针法来进行,设定两个指针,然后让这两个指针在同一起点开始,依次移动,不同的是一快一慢,然后当快指针的数值不等于val时,就慢指针就移动到快指针上,然后如果相等,就慢指针不变,然后快指针还是移动,然后不同的时候慢指针移动到快指针上然后就删除了
然后返回慢指针就OK了,上代码
3.有序数组的平方
这个题在我看来有两个解法,一个是暴力破解法,另一个时双指针
暴力破解法是先遍历平方,然后再冒泡排序
然后是双指针法
就这个题目提供的数组其实也是一种从小到大的顺序,然后我们设计两个指针,一个指向头一个指向尾部,然后比较排序就可以了
4.长度最小的子数组
这一道题我们可以使用两层for循环来解决,这样就太没有技术含量了,我们使用滑动窗口的方式来解决
什么叫做滑动窗口,他的意思的要找到最小的子数组,也就是咱可以定义两个指针在起始位置,然后在利用for循环来移动其中一个指针就比如说right吧另一个就是left,然后定义一个sum来计算总和,然后咱不是说要返回长度吗 而且还是最短的,所以咱就要在for循环之前定义个result它等于最大的数,然后就在,当sum>=target的时候,比较result和两个指针之间的长度,然后返回一个短的了,然后sum=sum-nums【left++】;然后如果减完之后他还大,那就继续比较,写一遍就明白了
然后上代码