暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

力扣刷题-双指针

只会C的码农 2021-04-14
317

今天由于小白导师拖着开组会,学习任务没跟上,晚上刷了哈力扣,看了下侯捷大佬的高级程序语言编程,讲得真的清新脱俗,推荐大家想学c++的一定要看,下面开始正题。

1、力扣第一题--两数之和

解题思路:暴力求解,直接遍历数组与目标值进行对比,相等的话返回数组元素的下标即可

代码如下:

    class Solution {
    public:
    vector<int> twoSum(vector<int>& nums, int target) {
    vector<int>out;
    for(int i =0;i < nums.size();i++)
    {
    for(int j = i+1;j < nums.size();j++)
    {
    if(nums[i] + nums[j] == target)
    {
    out.push_back(i);
    out.push_back(j);
    }
    }
    }
    return out;


    }
    };

    暴力法的缺点就是时间和空间复杂度极高,看解题分析:

    2、删除数组中的重复元素

    题目如下:

    解题思路:要删除重复的元素,需要采用双指针,一个慢指针和一个快指针,具体见代码,类似的题目力扣上还有很多,抓住最关键的一点就是,要删除重复的元素,必须将不重复的元素移动到最前面来,还有就是双指针的应用

    代码如下:

      class Solution {
      public:
      int removeDuplicates(vector<int>& nums) {
      //解题思路:因为数组是有序的数组,所以如果有重复的元素,肯定是相邻的,只需要定义一个双指针i和j,i指向第一个元素
      //j指向第二个元素,当两者指向的元素相等时,j向后移动;当两者指向的元素不相等时,将j所指向的元素赋值给i的后一个位置
      //的元素,再将i和j分别向后移动
      if(nums.size()==0)
      {
      return 0;
      }
      int i = 0;
      for(int j = 1;j < nums.size();j++)
      {
      if(nums[i] != nums[j])
      {
      nums[i+1]=nums[j];
      i++;
      }
      }
      return i +1; //得到的就是数组的长度


      }
      };

      内存和时间消耗如下:

      ok,今天的力扣刷题就到这里,第二题居然是简单题,我靠,伤害性不大,侮辱性极强呀,本来就压抑的一天easy题都解决不了,更压抑了。各位,晚安!(ps:封面请忽略)

      文章转载自只会C的码农,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论