23-06-07 --今日算法题

文章介绍了两道LeetCode上的编程题目,一道是使用二分查找法在有序整型数组中搜索目标值,另一道是原地移除数组中特定值的元素。两题都关注了时间复杂度为O(logn)和O(n),以及空间复杂度为O(1)的解决方案实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;//最后返回新的数组下标即可
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值