Day1 数组
704.二分查找,27. 移除元素
一、基础知识
java数组相关的api
数组的创建、初始化、访问、复制、排序等操作
- 创建和初始化数组:
int[] numbers = new int[5]; // 创建长度为5的整数数组
numbers[0] = 10; // 初始化数组元素
- 访问数组元素:
int firstNumber = numbers[0]; // 访问第一个元素
- 数组复制:
int[] copy = Arrays.copyOf(numbers, numbers.length); // 复制整个数组
- 数组排序:
Arrays.sort(numbers); // 对数组进行排序
- 查询数组元素:
int index = Arrays.binarySearch(numbers, 10); // 二分查找元素10的索引
- 填充数组:
Arrays.fill(numbers, 0); // 将数组所有元素填充为0
- 比较数组:
boolean areEqual = Arrays.equals(numbers, copy); // 比较两个数组是否相等
- 部分数组排序的api
public static void sort(int[] a, int fromIndex, int toIndex);
二、题目
梳理
1. 704
704是中规中矩的二分法模版题,最容易错的是边界的控制
第一种
定义 target 在left, right)
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length;
while(left<right){
int mid = (left + right)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid]>target){
right = mid;
}else {
left = mid + 1;
}
}
return -1;
}
}
第二种
定义 target 在left, right]
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while(left<=right){
int mid = (left + right)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid]>target){
right = mid - 1;
}else {
left = mid + 1;
}
}
return -1;
}
}
二分查找法:两种区间定义的归纳
描述 | 范围定义 | right 初始值 | 循环条件 | right 变化方式 | left 变化方式 |
---|---|---|---|---|---|
第一种方法 | [left, right) | nums.length | left < right | right = mid | left = mid + 1 |
第二种方法 | [left, right] | nums.length - 1 | left <= right | right = mid - 1 | left = mid + 1 |
2. 27
27是移除给定的元素。这里要妥善的处理移除,因为数组里面地址是连续的,所以不能直接“拿掉”目标,而是通过移动-覆盖的方式。
代码
- 704
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while(left<=right){
int mid = (left + right)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid]>target){
right = mid - 1;
}else {
left = mid + 1;
}
}
return -1;
}
}
- 27
class Solution {
public int removeElement(int[] nums, int val) {
int count = 0;
for (int i = 0; i < nums.length; i++) {
//如果不是目标值就依次向前覆盖
if(nums[i] != val)nums[count++] = nums[i];
}
return count;
}
}