算法刷题 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

浙公网安备 33010602011771号