day1 |704.二分查找、27.移除元素

题目链接:704. 二分查找 - 力扣(LeetCode)

题目描述:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
    public int search(int[] nums, int target) {
        int low=0, high=nums.length-1;       
        while(low<=high){
            int mid = (low+high)/2;<br>       //用这个写法可能会造成浮点数溢出,详见:<a href="https://blog.csdn.net/jivvv/article/details/128467179?spm=1001.2014.3001.5501" rel="noopener nofollow">代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素_方可申别翘二郎腿的博客-CSDN博客</a>
            if(target>nums[mid]){
                low=mid+1
            }
            if(target<nums[mid]){
                high=mid-1;
            }
            if(target==nums[mid]){
                return mid;
            }
        }
        return -1;
    }
}

刚开始while条件中写的条件是 low!=high 这样会造成错误:nums数组中只有一个元素时会查找错误。

 

题目链接:27. 移除元素 - 力扣(LeetCode)

题目描述:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

代码:

方法一:暴力求解法

时间复杂度:O(n^2)

复制代码
 1 class Solution {
 2     public int removeElement(int[] nums, int val) {
 3         int len=nums.length;
 4         for(int i=0;i<len;i++){
 5             if(nums[i]==val){
 6                 for(int j=i+1;j<len;j++){
 7                     nums[j-1]=nums[j];
 8                 }
 9                 i--;
10                 len--;
11             }
12         }
13         return len;
14     }
15 }
复制代码

方法二:双指针(定义快慢指针)

 时间复杂度:O(n)

快指针:查找旧数组中等于val的元素。

慢指针:更新新数组中的元素。

代码思路:数组中不等于val的值也是新数组中的元素,所以慢指针所指的元素就等于快指针所指的元素,如果快指针遇到val值,则不更新新数组,快指针继续往下走。

复制代码
 1 class Solution {
 2     public int removeElement(int[] nums, int val) {
 3         int slow=0;
 4         for(int i=0;i<nums.length;i++){
 5             if(nums[i]!=val){
 6                 nums[slow]=nums[i];
 7                 slow++;
 8             }
 9         }
10         return slow;
11     }
12 }
复制代码

 参考文章:代码随想录 (programmercarl.com)

posted @   Inbreak  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示