代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素

704. 二分查找

题目链接:704. 二分查找
二分查找的前提数组有序没有重复元素
二分查找最重要的一点是找到一个固定的区间,在循环查找目标值时需严格按照区间的定义进行操作
常见的区间定义有两种,左闭右闭即[left, right],或者左闭右开即[left, right)。

左闭右闭[left, right]

左闭右闭需要注意两点:
1.循环的条件:
因为区间中包含左右两端的元素,所以left == right是有意义的,所以循环条件为 while(left<=right),区别在
2.当middle大于目标值时,right的赋值:
当 (nums[middle] > target)时 right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1。如果 right=middle 就不符合右闭的条件了。反之亦然。
代码如下:

//java
 public int search(int[] nums, int target) {
        int left=0;
        int right=nums.length-1;
        int result;
        while(left<=right){
            result=left+(right-left)/2;
            if(target==nums[result]){
                return result;
            }
            else if(target
左闭右开[left, right)

左闭右开同样需要注意两点:
1.循环的条件:
因为区间中只包含左端的元素,所以left == right是没有意义的,所以循环条件为 while(left 2.当middle大于目标值时,right的赋值:
当 (nums[middle] > target)时 right 要赋值为 middle,因为右端是开区间,所以不会再比较nums[middle],但是左边是闭区间,所以要加1
代码如下:

//java
 public int search(int[] nums, int target) {
        int left=0;
        int right=nums.length-1;
        int result;
        while(left

简单总结就是
left == right有意义的 循环加=
开区间middle直接赋值给left,right
闭区间需排除当前middle值

27. 移除元素

题目链接:[27.移除元素]
使用双指针思想
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置
如果快指针指向的值不为规定值,那么慢指针保留快指针的值并向后移动。当快指针遍历结束后返回慢指针的位置,就是删除固定值的数组
代码如下

  //快慢指针
    //快指针筛选元素
    //慢指针存储元素
    public int removeElement(int[] nums, int val) {
        int flow=0;
        for(int fast=0;fast

相关题目推荐:
283.移动零

你可能感兴趣的:(代码随想录,算法,数据结构,leetcode)