当前位置:   article > 正文

代码随想录算法训练营第一天|leetcode27、704题

代码随想录算法训练营第一天|leetcode27、704题

一、leetcode第704题

本题要求在升序数组中查找目标元素的下标,采用暴力算法扫描数组的时间复杂度为O(n),而使用二分查找法的时间复杂度为O(log2n)。使用二分查找法需要把握目标元素所在数组的起始下标、中点下标和终止下标的关系,通过二分查找可以将目标数组不断缩小直到找到目标元素。

具体代码如下:

  1. class Solution {
  2. public:
  3.     int search(vector<int>& nums, int target) {
  4.     int n=nums.size();
  5.     int low=0;
  6.     int high=n-1;
  7.     while(low<=high)
  8.     {
  9.         int mid=(low+high)/2;
  10.         if(target>nums[mid])
  11.         {
  12.             low=mid+1;
  13.         }
  14.         else if(target<nums[mid])
  15.         {
  16.             high=mid-1;
  17.         }
  18.         else if(target==nums[mid])
  19.         {
  20.             return mid;
  21.         }
  22.     }
  23.     return -1;
  24.     }
  25. };

二、leetcode第27题

本题要求在目标数组中删除值等于val的元素,下面展示两种解法。

法一:从数组开头扫描,遇到值等于val的元素就将其与当前数组最后一个元素互换而后将数组的长度减一,直到扫描的元素为当前数组的最后一个元素。

具体代码如下:

  1. class Solution {
  2. public:
  3.     int removeElement(vector<int>& nums, int val) {
  4.     int n=nums.size();
  5.     int i=0;
  6.     while(i<n)
  7.     {
  8.         if(nums[i]==val)
  9.         {
  10.             int temp=nums[i];
  11.             nums[i]=nums[n-1];
  12.             nums[n-1]=temp;
  13.             n--;
  14.         }
  15.         else
  16.         {
  17.             i++;
  18.         }
  19.     }
  20.     return n;
  21.     }
  22. };


法二:使用左右指针,左右指针开始均指向第一个元素,如果右指针指向的元素值不为val,将右指针指向的元素值代替左指针指向的元素值,左右指针均向右移动1;如果右指针指向的元素值为val,则将右指针向右移动1,左指针不动,直到右指针遍历完整个数组为止。这样左指针之前的元素值均不为val。

具体代码如下:

  1. class Solution {
  2. public:
  3.     int removeElement(vector<int>& nums, int val) {
  4.         int n = nums.size();
  5.         int left = 0;
  6.         for (int right = 0; right < n; right++) {
  7.             if (nums[right] != val) {
  8.                 nums[left] = nums[right];
  9.                 left++;
  10.             }
  11.         }
  12.         return left;
  13.     }
  14. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/836360
推荐阅读
相关标签
  

闽ICP备14008679号