代码随想录day01| 704. 二分查找、27. 移除元素、977有序数组的平方

提示:DDU


题目

刷算法的第一天,使用csdn记录的第一天。


一、二分查找

需要注意区间的问题。
左闭右开,左闭右闭。
记住一个就可以,第二个对我来说比较好记。

class Solution
{
public:
  int search(vector<int> &nums, int target)
  {
    int l = 0, r = nums.size();
    while (l <= r) //主要的区别也是这里,注意区间里面的所有元素是否可以取到。
    {
      int mid = (l + r) / 2;
      if (target > nums[mid]){
        l = mid + 1;
      }else if (target < nums[mid]){
        r = mid - 1;
      }else{
        return mid;
      }
    }
    return -1;
  }
};

二、移除元素

本题需要掌握双指针解法,也需要写一遍暴力解法的操作。

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int size = nums.size();
        for (int i = 0; i < size; i++) {
            if (nums[i] == val) { 
                for (int j = i + 1; j < size; j++) { //注意这里的j的取值和数组的范围。
                    nums[j - 1] = nums[j];
                }
                i--; 
                size--;
            }
        }
        return size;

    }
};
  • 时间复杂度:O(log n)
  • 空间复杂度:O(log 1)

二、有序数组的平方

也是利用到了双指针(快慢指针),大概理解就是一个用来读,一个用来写。

class Solution
{
public:
  vector<int> sortedSquares(vector<int> &nums)
  {
    int k = nums.size() - 1;
    vector<int> result(nums.size(), 0);
    for (int i = 0, j = nums.size() - 1; i <= j;)
    {
      if (nums[i] * nums[i] < nums[j] * nums[j])
      {
        result[k--] = nums[j] * nums[j];
        j--;
      }
      else
      {
        result[k--] = nums[i] * nums[i];
        i++;
      }
    }
    return result;
  }
};
// @lc code=end

总结

题目:今天的题目都理解了。
感受:希望通过训练营可以倒逼自己一把,从今天开始,为期两个月的刷题,每天都要有一点收获,也许不多,但一定要有。加油,你可以的。(后面整理一个模版,写一下每天的收获与反思吧。)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值