LeetCode刷題:Array系列之Remove Element

2021-01-14 C與Python實戰

1、要求

Given an array and a value, remove all instances of that > value in place and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.

Example:
Given input array nums = [3,2,2,3], val = 3 
Your function should return length = 2, with the first two elements of nums being 2.

2、第一種實現方式

思路:遍歷vector的所有項,分別與val比較

2.1 頭文件和準備工作

#include <iostream>
#include <vector>
using namespace std;

2.2 實現代碼


class Solution
{
public:
   int removeElement(vector<int>& nums, int val)
   {
       int index = 0;
       for (size_t i = 0; i < nums.size(); ++i)
       {
           if (nums[i] != val)
               nums[index++] = nums[i];
       }

       return index;
   }    
};

2.3 測試代碼

int main()
{
   using namespace std;
   Solution sol;
   vector<int> vec{1, 2, 5, 6, 12, 45, 8, 4, 5, 4};
   cout << "Original vector's size is " << vec.size() << endl;

   int count = sol.removeElement(vec, 5);

   cout << "New vector's size is " << count << endl;
   for (int i = 0; i < count; ++i)
       cout << "vec[" << i << "] = " << vec[i] << endl;

   return 0;
}

2.4 運行結果

3、第二種實現方式

思路:利用remove和distance函數實現。
參考來自於:https://github.com/soulmachine/leetcode
remove MSDN介紹
remove 博客參考
distance MSDN介紹

3.1 remove()3.1.1 語法

template<class ForwardIterator, class T>
ForwardIterator remove(ForwardIterator first, ForwardIterator last,
   const T& value);

3.1.2 參數3.1.3 返回值

一個指向最後一個的下一個「不刪除的」元素的迭代器。返回值是區間的「新邏輯終點」。

3.1.4 注意

vector中的remove的作用是將等於value的元素放到vector的尾部,但並不減少vector的size

3.2 distance()3.2.1 語法

template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
  distance(
     InputIterator _First,
     InputIterator _Last
  );

3.2.2 參數

_First

要計算距離迭代器的起點。

_Last
要計算距離迭代器的終點。

3.2.3 返回值

_First和_Last之間元素的個數。

3.2.3 要求

Header: <iterator>
Namespace: std

3.3 頭文件和準備工作

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

3.4 實現代碼


class Solution2
{
public:
   int removeElement(vector<int>& nums, int val)
   {
       return distance(nums.begin(), remove(nums.begin(), nums.end(), val));
   }
};

3.5 測試代碼

vector<int> vec2{3,2,2,3};
int count = sol2.removeElement(vec2, 3);
cout << "New vector2's size is " << count << endl;
cout << "New vector2's real size is " << vec2.size();
for (int i = 0; i < count; ++i)
 cout << "vec[" << i << "] = " << vec2[i] << endl;

3.6 運行結果

4、完整代碼

完整代碼見於GitHub 。


相關焦點

  • LeetCode刷題第三周【數組(簡單)】
    參考資料[1]Leetcode網站: https://leetcode-cn.com/[2]以上文字描述均來自 LeetCode數組模塊: https://leetcode-cn.com/tag/array/[3]刷題請點擊或見附錄:1539.
  • 網際網路公司最常見的面試算法題大集合
    很多求職者都會在LeetCode刷上一遍,面試官也喜歡在上面挑選各類題目。LeetCode是一個美國的在線編程網站,收集了各個大廠的筆試面試題,對找工作的畢業生和開發者來說,非常有價值。不過LeetCode上面的題目很多都是考察應聘者對基礎知識的應用,適合進行練習編程基礎或者準備面試。
  • leetcode刷對了麼
    @anonymity:參加了一些公司的筆試,看到過leetcode上的原題或近似題。最後,從了某公司的美國總部軟體工程師的offer。學生們項目經驗少,只能考算法。刷題很有用。
  • [LeetCode] 912. Sort an Array 數組排序
    ,在平時刷其他題的時候,遇到要排序的時候,一般都會調用系統自帶的排序函數,像 C++ 中直接就調用 sort 函數即可,但是這道題考察的就是排序,再調用系統的排序函數就有些說不過去了。它們的時間複雜度不盡相同,這道題貌似對於平方級複雜度的排序方法會超時,所以只能使用那些速度比較快的排序方法啦。
  • [LeetCode] 918. Maximum Sum Circular Subarray 環形子數組的最大和
    Also, a subarray may only include each element of the fixed buffer A at most once.  (Formally, for a subarray C[i],C[i+1],...
  • ​LeetCode刷題實戰137:只出現一次的數字 II
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做只出現一次的數字 II,我們先來看題面:https://leetcode-cn.com/problems/single-number-ii/Given an integer array nums where every element appears three times except for one, which appears exactly
  • 通關LeetCode刷題完整攻略,省時又高效
    每一次循環中,我們都會把隊頭結點拿出來(remove),然後對其進行必要的操作。在刪除每個節點的同時,其孩子節點,都會被加到隊列中。Pattern: Top 『K』 Elements,前K個系列任何讓我們求解最大/最小/最頻繁的K個元素的題,都遵循這種模式。用來記錄這種前K類型的最佳數據結構就是堆了(譯者註:在Java中,改了個名,叫優先隊列(PriorityQueue))。
  • 2019/10/25-LeetCode Array (Day01)
    You may assume that each input would have exactly one solution, and you may not use the same element twice.
  • ​LeetCode刷題實戰53:最大子序和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 最大子序和,我們先來看題面:https://leetcode-cn.com/problems/maximum-subarray/Given an integer array nums, find the contiguous subarray (containing at least one number
  • ​LeetCode刷題實戰15題: 三數之和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做三數之和 ,我們先來看題面:https://leetcode.com/problems/3sum/描述給定一個整數的數組,要求尋找當中所有的a,b,c三個數的組合,使得三個數的和為0.注意,
  • LeetCode數組類知識點&題型總結
    leetcode第一題就是two-sum,對於這類題目,首先看題目要求的時間複雜度和空間複雜度是什麼,其次看有沒有限制條件,如要求不能有重複的子數組或者要求按照升序/降序排列等。形式有很多種,例如求一個數組中和最小的子數組(209題),或者積最小的子數組(238題)Input: s = 7, nums = [2,3,1,2,4,3]Output: 2解釋:滿足子數組和=7的最小長度數組是[4,3],所以output=2解題思路:求的數字要大於等於這個數字target,譬如這個testcase中,[2,3,1,2,4,3
  • 小張刷題計劃
    原題為了提高自己的代碼能力,小張制定了 LeetCode 刷題計劃,他選中了 LeetCode 題庫中的 n 道題,編號從 0 到 n-1,並計劃在 m 天內按照題目編號順序刷完所有的題目(注意,小張不能用多天完成同一題)。在小張刷題計劃中,小張需要用 time[i] 的時間完成編號 i 的題目。
  • 數據結構與算法:05 Leetcode同步練習(一)
    /problems/remove-duplicates-from-sorted-array/給定一個 排序數組,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。/problems/remove-element/給定一個數組nums和一個值val,你需要原地移除所有數值等於val的元素,返回移除後數組的新長度。
  • Leetcode上你刷到最難的是哪道題?
    首先依然通過利索的爬蟲獲取了Leetcode官網題庫的所有題的數據,包括點讚、踩、提交數、AC率等等數據,有了這些數據,我們就可以對這些題目做一個簡單的數據分析,從而作為自己刷題參考的一個依據。經統計,Leetcode上點讚最多的題,依次是 1、2、3、4、15題,大概刷題也像背單詞一樣,經常背,但背來背去始終是abandon(某些英語書第一個單詞),序號越靠前的題目有越多人參與。
  • [每日一題]410. Split Array Largest Sum
    代碼解釋在主函數split_array中, 我取數組最大值和數組之和作為取值區間。然後是二分法的標準套路,除了要注意,我取的是閉區間,沒有什麼可說的。他的代碼如下總結二分法的前置條件是求的結果必須跟一個變量是單調遞增或者遞減的關係二分法的區間應該儘量的小,否則遇到特別的case就會超時二分法的開閉區間的移動條件是不一樣的,寫代碼的時候一定要注意「每日一題」
  • Leetcode刷題No.234
    今天的題目就是一道套路題。https://leetcode-cn.com/problems/palindrome-linked-list
  • 刷了幾千道算法題,我私藏的刷題網站都在這裡了
    然而我是誰,我可是死狗中的戰鬥雞,智力不夠那刷題來湊,開始了夜以繼日哼哧哼哧刷題的日子,從此"讀題與提交齊飛, AC 與 WA 一色 ",我驚喜的發現被題虐既刺激又有快感,那一刻我淚流滿面。這麼好的事兒作為一個正直的人絕不能自己獨享,經過激烈的顱內鬥爭,我決定把我私藏的十幾個 T 的,阿不,十幾個刷題網站放出來,讓我們一起爽!
  • Leetcode 37 超越100%算法,解數獨@python
    Leetcode 37 解數獨,具體代碼見上圖,下面講一些注意點1.本題採用算法思想:交集回溯,即使用行、列、3*3矩陣已有數字,通過交集推算每個框可能的數據,然後驗證,驗證不通過回溯,直至驗證通過=set(map(str,[1,2,3,4,5,6,7,8,9]))rowarray=[onearray.copy() for _ in xrange(9)] colarray=[onearray.copy() for _ in xrange(9)] cellarray=[onearray.copy
  • leetCode第4題:Median of Two Sorted Arrays
    原題:There are two sorted arrays A and B of size m and n respectively
  • 8個程式設計師常用的刷題網站,第一個你絕對用過!
    作者 | JackTian 來源 | 傑哥的IT之旅 好久沒跟大家分享實用工具了,今天給大家分享一些程式設計師常用的刷題網站