前言
今天是数组刷题,尽管看着都是简单的题,且之前刷过几次,但是还是耗时接近2小时。
- 704-二分查找:2024-10-16 通过
- 27-移除元素:2024-10-16 通过
- 977-有序数组的平方:2024-10-16 通过
1、题目1:704-二分查找
题目链接:leetcode.cn/problems/bi...
难度:简单
题目:给定一个n
个元素有序的(升序)整型数组nums
和一个目标值target
,写一个函数搜索nums
中的target
,如果目标值存在返回下标,否则返回-1
。
示例 1:
makefile
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
makefile
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
代码:
sql
public class Number_704 {
public static int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right){
int mid = left + (right - left)/2 ;
if(nums[mid] > target){
right--;
} else if (nums[mid] < target) {
left++;
}else{
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] ints = {-1, 0, 3, 5, 9, 12};
int search = search(ints, 9);
System.out.println(search);
}
}
思路小结:
- 记住一种常用的写法即可,while(left <= right),然后 mid+1 和 mid-1
- Mid 计算不越界
2、题目2:27-移除元素
题目链接:leetcode.cn/problems/re...
难度:简单
题目:
给你一个数组
nums
**和一个值val
,你需要 原地 移除所有数值等于val
**的元素。元素的顺序可能发生改变。然后返回nums
中与val
不同的元素的数量。假设
nums
中不等于val
的元素数量为k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。- 返回
k
。
思路:
- 原地删除元素可以考虑双指针法,而且是快慢指针
- Slow 的值就是不相等的个数,默认是0开始计算
代码:
ini
public class Number_27 {
public static void main(String[] args) {
int[] ints = {0,1,2,2,3,0,4,2};
int search = removeElement(ints, 2);
System.out.println(search);
}
public static int removeElement(int[] nums, int val) {
int slow =0;
for (int fast = 0; fast < nums.length; fast++) {
if(nums[fast] != val){
// 将等于 val 的元素都移动到最后面
nums[slow++] = nums[fast];
}
}
return slow;
}
}
3、题目3:977-有序数组的平方
题目链接:leetcode.cn/problems/sq...
难度:简单
题目:
给你一个按 非递减顺序 排序的整数数组
nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
ini
示例 1:
输入: nums = [-4,-1,0,3,10]
输出: [0,1,9,16,100]
解释: 平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
示例 2:
输入: nums = [-7,-3,2,3,11]
输出: [4,9,9,49,121]
思路:
-
数组的常用解法就是双指针,这题也可以用到,一头一尾指针
-
通过比较头指针和尾指针的大小,可以得到一个最大值(非递减顺序排序的)。
-
初始化一个数组,依次往最后一个位置插入元素
代码:
ini
public class Number_977 {
public static void main(String[] args) {
int[] nums ={-4,-1,0,3,10};
int[] ints = sortedSquares(nums);
for (int i : ints) {
System.out.println(i);
}
}
public static int[] sortedSquares(int[] nums) {
int[] result = new int[nums.length];
int index= nums.length-1;
int slow = 0;
int fast = nums.length -1;
while (slow <= fast) {
int slowval = nums[slow]* nums[slow];
int fastval = nums[fast]* nums[fast];
if(slowval < fastval){
fast--;
result[index--] = fastval;
}else{
slow++;
result[index--] = slowval;
}
}
return result;
}
}
其他思路想法:
- 采用提供的工具 Arrays.sort(nums)即可完成排序,非常快