刷题日记01 | 704. 二分查找、27. 移除元素

235 阅读1分钟

刷题日记01

这是第二次能有段比较长的时间来刷题了,顺便写个日记记录一下。这几天会先从数组开始刷。

704 二分查找

这道题看起来简单,但要想清楚是用开区间还是闭区间,这里是用的后者,[left, right]

class Solution {
    public int search(int[] nums, int target) {
        int mid;
        int left = 0;
        int right = nums.length - 1;
        while(left <= right){
            mid = left + ((right - left) / 2);
            if(nums[mid] == target){
                return mid;
            } else if(nums[mid] < target){
                left = mid + 1;
            } else{
                right = mid - 1;
            }
        }       
        return -1;
    }
}

27 移除元素

也是属于看着简单的题,一开始也是想着用两个for循环暴力解题,甚至已经开始写了才发现不太对,应该再想想,双指针是更好的解法,在数组类的题目中,双指针是非常常用的算法,还是经验不太足,应该继续努力。

class Solution {
    public int removeElement(int[] nums, int val) {
        int slow = 0;
        for(int fast = 0; fast < nums.length; fast++){
            if(nums[fast] != val){
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    }
}