算法刷题 Day 1 | 704.二分查找 & 27.移除元素

今天是开始刷题的第一天,就像背单词书又从Abandon开始了一样,但是这次一定要坚持下来。

第一天的内容是熟悉的数组,先来看第一题二分查找

704.二分查找

题目链接:https://leetcode.cn/problems/binary-search/

Tips:

这一题也没啥好说的,想清楚自己用的是左闭右开区间,然后细心写完代码就行。

注意Java里获取数组长度是直接 .length,没有括号也不是size。

我的题解:

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

文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html

视频讲解:https://www.bilibili.com/video/BV1fA4y1o715

27.移除元素   

题目链接:https://leetcode.cn/problems/remove-element/

Tips:

重点在于双指针法的使用。在双指针法当中,永远只有一个主循环,用于移动其中一个指针,另一个指针的移动要在这个主循环中顺便完成。

我的题解:

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

文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html

视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP

posted @ 2022-12-28 21:48  GavinGYM  阅读(59)  评论(0)    收藏  举报