likes
comments
collection
share

代码随想录打卡day1

作者站长头像
站长
· 阅读数 49

一,二分法的两种写法

第一种写法

class Solution {
    public int search(int[] nums, int target) {
    //第一种二分法: target 在[left,right]中,开始于[0,len-1], left可与等于right
        int left = 0;
        int right = nums.length - 1;
        int mid = 0;//初始化赋的初值无所谓
        while (left <= right) { // left可与等于right
            mid = (left+right) / 2;
            if (target < nums[mid])
                right = mid -1;
            else if(nums[mid] < target)
                left = mid +1;
            else
                return mid;
        }
        return -1;
    }
}

第二种写法

class Solution {
    public int search(int[] nums, int target) {
    //第二种二分法: target 在[left,right)中,开始于[0,len), left不可等于right
        int left = 0;
        int right = nums.length;
        int mid = 0;//初始化赋的初值无所谓
        while (left < right) { //left不可等于right
            mid = (left+right) / 2;
            if (target < nums[mid])
                right = mid;
            else if(nums[mid] < target)
                left = mid +1;
            else
                return mid;
        }
        return -1;
    }
}

需要注意的几个点:1, right = len / len -12, while(left </<= right)3, right = mid / mid -1

二,双指针化简两层循环

class Solution {
    public int removeElement(int[] nums, int val) {
        int j = 0;
        for (int i=0; i < nums.length; i++) {
            if (nums[i] == val)
                continue;
            else{
                nums[j] = nums[i];
                j++;
            }
        }
        return j;
    }
}

指针i遍历整个指针j用来储存元素

转载自:https://segmentfault.com/a/1190000043325467
评论
请登录