二分查找 :
题目链接 704.二分查找
代码随想录题目解析代码随想录二分查找
题目描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
具体代码实现:
//二分法查找
//左闭右闭
class Solution1{
public int search(int[] nums, int target){
int left = 0;
int right = nums.length-1;
while(left<=right){ //左闭右闭
int middle = (left+right) /2;
if(target < nums[middle]) //目标在左半区间
right = middle-1; //右侧边界变换,进入下次循环
else if(target > nums[middle]) //目标在左半区间
left = middle+1; //右侧边界变换,进入下次循环
else return middle; //已找到
}
return -1; //未找到
}
}
//左闭右开
class Solution2{
public int search(int[] nums, int target){
int left = 0;
int right = nums.length-1;
while(left < right){ //左闭右开
int middle = (left+right) /2;
if(target < nums[middle]) //目标在左半区间
right = middle; //右侧边界变换,进入下次循环
else if(target > nums[middle]) //目标在左半区间
left = middle+1; //右侧边界变换,进入下次循环
else return middle; //已找到目标元素的下标,并返回
}
return -1; //未找到
}
}
public class Solution_text {
public static void main(String[] args){
Solution1 a = new Solution1();
Solution2 b = new Solution2();
int[] nums = new int [args.length-1]; //创建数组,根据主函数中参数来创建,保留最后一个参数作为查找目标
for (int i = 0; i < args.length-1; i++) { //依次创建每个数组元素
nums[i] = Integer.parseInt(args[i]);
}
int target = Integer.parseInt(args[args.length-1]); //确定目标元素
System.out.println(a.search(nums, target));
System.out.println(b.search(nums, target));
}
}
前提条件:
数组是有序的
数组中无重复元素
移除元素
题目链接 : 移除元素
代码随想录题目解析:代码随想录移除元素
题目描述:
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1)
额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
代码实现:
//移除元素(双指针法)
class Solution {
public int removeElement(int[] nums, int val) {
int slow=0;
for(int fast=0;fast<nums.length;fast++) //快指针依次向前移动
if(val!=nums[fast]){ //若是待删除元素,跳过当前循环,不进行元素复刻
nums[slow]=nums[fast]; //若不是待删除元素,复刻到原数组中
slow++; //慢指针向前移动
}
return slow;
}
}
public class Solution_text {
public static void main(String[] args){
Solution a = new Solution();
int[] nums = new int [args.length-1]; //创建数组,根据主函数中参数来创建,保留最后一个参数作为删除目标
for (int i = 0; i < args.length-1; i++) { //依次创建每个数组元素
nums[i] = Integer.parseInt(args[i]);
}
int val = Integer.parseInt(args[args.length-1]); //确定待删除元素
int size = a.removeElement(nums, val);
System.out.println(size); //打印修改后元素的个数
for(int i=0;i<size;i++) //打印修改后的数组
System.out.print(nums[i]);
}
}