LeetCode 704 二分查找
题目链接:二分查找
思路:二分法最直接的思路是对已经排序好的数组进行二分查找,但易错点在于循环条件的确定,是否小于等于,左边界点与右边界点相同时是否有意义。
package Array;
/**
* @author rpstart
* @create 2023-06-28 9:12
*/
public class search704 {
public static void main(String[] args) {
int[] nums = {-1,0,3,5,9,12};
int target = 9;
int res = search(nums, target);
System.out.println(res);
}
public static int search(int[] nums, int target) {
if (target > nums[nums.length - 1] || target < nums[0]) {
return -1;
}
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int index = (left + right) / 2;
if (nums[index] == target) {
return index;
} else if (nums[index] > target) {
right = index - 1;
} else if (nums[index] < target) {
left = index + 1;
}
}
return -1;
}
}
LeetCode 27 移除元素
题目链接:移除元素
思路:移除元素的核心思想在于理解数组的覆盖性,数组中的内容只能覆盖并不能删除,但题目要求只关注删除元素后的前序列,因此可以通过双指针来实现。
package Array;
import java.util.Arrays;
/**
* @author rpstart
* @create 2023-06-28 10:41
*/
public class removeElement27 {
public static void main(String[] args) {
int[] nums = {3,2,2,3};
int val = 3;
int res = removeElement(nums, val);
System.out.println(res);
}
public static int removeElement(int[] nums, int val) {
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
if (nums[fastIndex] != val) {
nums[slowIndex] = nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
}