首页 > 编程语言 >算法刷题 Day 1 | 704.二分查找 & 27.移除元素

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

时间:2022-12-28 21:55:42浏览次数:64  
标签:27 middle 704 nums int right https 移除 left

今天是开始刷题的第一天,就像背单词书又从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

标签:27,middle,704,nums,int,right,https,移除,left
From: https://www.cnblogs.com/GavinGYM/p/17011357.html

相关文章