leedcode 704 二分查找
题目:给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
关键信息:有序整型数组---二分查找必要条件
时间复杂度:O(log n),n为整个数组长度
空间复杂度:O(1) 固定空间保存常量
public class BrinarySearch{
public static int search(int []nums,int target)
{
int left = 0;//设定左边坐标点初始值
int right = nums.length - 1;//数组长度 - 1 = 末尾下标值
//在此我采用了左闭右闭方法 [left,right] while的循环边界条件就是
// left <= right 有可能是没有数字的空数组
while(left <= right){
//给定一个中间变量,代表二分查找的值
int nid = (right - left)/2 ;
//int mid = (right + left)/2 +left;
//两者最大的区别就是第二种right +left最后的数值可能大于nums.size(),造成溢出问题
//前者不存在此类情况
int num = nums[mid];//给定中间变量,存储二分查找值
if(target == num){
//目标值 = 二分查找值,说明找到了
return mid;
}else if(num > target){
//目标值 < 二分查找值 说明目标值在[left,nums[mid]]
right = mid - 1;
}else if(num < target){
//目标值 > 二分查找值 目标值在[nums[mid],right]
left = mid + 1;
}
}
}
}
LeedCode 27 移除元素
题目:
给你一个数组 nums
和一个值 val
,你需要原地移除所有数值等于 val
的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1)
额外空间并原地修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
关键信息:原地删除val元素,返回新数组长度,不能使用额外数组空间
时间复杂度:O(n),n为整个序列长度
空间复杂度:O(1) 固定空间保存常量
public class RemoveElement{
public static int removeElement(int nums[],int val){
int n = nums.length();//用于for循环的条件
int left = 0;//设定一个初始指针
for(int right = 0;right <n; right++){
//设定第二个初始指针right
if(right != val){
nums[left] = nums[right];//把查找到不一样的数据传给第一个指针
left++;成功一次下边增加
}
}
return left;//最后返回新的数组下标即可
}
}