代码随想录训练营Day1|704,27

题目链接力扣

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

class Solution {

public:

    int search(vector<int>& nums, int target) {

        int left = 0;

        int right = nums.size() - 1;

        int mid = (right - left) / 2;

        int result =-1;

        while (left < right) {

            if (nums[mid] > target) {

                mid = left + 1;

            }

            if (nums[mid] > target) {

                mid = right -1;

            }

            if (nums[mid] == target) {

                result = mid;

            }

        }

        return result;

    }

};

超出时间限制???,检查后发现边界条件缺少等于,因为我选择的是左闭右闭,所以left==right是有意义的,故循环条件里应有等号,再其次检查,发现mid定义错位置,需要定义在循环里去迭代,再一个就是发现左右值写错,左右值应更新为mid-1/mid+1,而上面写成了更新mid,两个均为>号,再一个把if,else条件做了更新,发现超出时间限制的根本原因是记录了结果,不是找到就返回,那么可能会陷入死循环,此题目并非需要记录返回值,而是找到就返回,正确代码如下:

class Solution {

public:

    int search(vector<int>& nums, int target) {

        int left = 0;

        int right = nums.size() - 1;

        while (left <= right) {

            int mid = left + (right - left) / 2;

            if (nums[mid] < target) {

                left = mid + 1;

            }

            else if (nums[mid] > target) {

                right = mid -1;

            }

            else {

                return mid;

            }

        }

        return -1;

    }

};

这道题目的前提是有序数组,且无重复元素。循环的边界条件容易出错,

第二题27https://leetcode.cn/problems/remove-element/

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

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

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

class Solution {

public:

    int removeElement(vector<int>& nums, int val) {

        

        int before = 0;

        for (int front = 0; front < nums.size(); front++) {

            if (nums[front] != val) {

                nums[before++] = nums[front];

            }

            else{

                continue;

            }

        }

        return before ;

    }

};

这个题的思路是一个指针遍历全部的数组筛选是否要替换掉这个值,在用一个指针来记录只记录不需要替换的值,这样就实现了前before个都是需要的值,返回值的时候我一开始进了+1,返回错误,因为在判断后有++,故before刚好是数组长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值