重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
描述
成都創新互聯長期為上千多家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為榆中企業提供專業的成都網站設計、成都做網站,榆中網站改版等技術服務。擁有十余年豐富建站經驗和眾多成功案例,為您定制開發。Given a sorted array, remove the duplicates in place such that each element appear only once
and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example, Given input array A = [1,1,2],
Your function should return length = 2, and A is now [1,2].
要求時間復雜度為O(n),空間復雜度為O(1)
#include#include #include #include using namespace std; class Solution { public: int removeDuplicates(char *a, size_t len) { assert(a); size_t index = 1; int first = 0; int second = 1; while (second < len){ if (a[second] != a[first]){ a[index++] = a[second]; first = second; } second++; } return index; } };
以上是我自己看完題目后所編寫的程序
分析:
len是數組元素的個數
first為第一個元素下標,second為第二個元素下標(如果數組只有一個元素,則不會進入循環,而是直接返回1)
index為復制后數組的個數
運行結果:
測試數組為 char a[16] = { 1, 1, 1, 2, 2, 2,2,5 ,6,6,6,6,7,7,8,9};
以下是參考LeetCode中使用STL實現的代碼
代碼1:
class Solution { public: int removeDuplicates(char a[], size_t len) { return distance(a, unique(a, a + len)); } };
所使用的函數:
templateForwardIterator unique ( ForwardIterator first, ForwardIterator last );
distance (InputIterator first, InputIterator last);
代碼2:
class Solution { public: int removeDuplicates(char a[], size_t len) { return _removeDuplicates(a,a+len,a)-a; } templateT2 _removeDuplicates(T1 first, T1 last, T2 output) { while (first != last){ *output++ = first; first = upper_bound(first,last,*first); } return output; } };
所使用的函數:
templateForwardIterator upper_bound ( ForwardIterator first, ForwardIterator last, const T& value );
================================================================
描述
Follow up for ”Remove Duplicates”: What if duplicates are allowed at most twice?
For example, Given sorted array A = [1,1,1,2,2,3],
Your function should return length = 5, and A is now [1,1,2,2,3]
要求時間復雜度為O(n),空間復雜度為O(1)
class Solution2 { public: int removeDuplicates(int a[], size_t len) { return _removeDuplicates(a,a+len,a)-a; } templateT2 _removeDuplicates(T1 first, T1 last, T2 output) { T1 tmp = first; while (first != last){ if ((tmp!=first-1)&&(*tmp == *(first - 1))){ *output++ = *(first - 1); } *output++ = *first; tmp = first; first = upper_bound(first,last,*first); } return output; } };
以上代碼是我自己根據上題中使用STL進行部分代碼修改實現成功的程序
運行結果:
測試數組為 int a[16] = { 1, 1, 1, 2, 2, 2,2,5 ,6,6,6,6,7,7,8,9};
以下是參考LeetCode中實現的代碼
代碼1:
class Solution2 { public: int removeDuplicates(int *a,size_t len) { size_t index = 2; for (int i = 2; i < len ; ++i){ if (a[i] != a[index - 2]) a[index++] = a[i]; } return index; } };
代碼2:
class Solution2 { public: int removeDuplicates(int *a, size_t len) { int index = 0; for (int i = 0; i < len ; ++i){ if (i>0 && i另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文題目:數組——RemoveDuplicatesfromSortedArray-創新互聯
當前路徑:http://www.xueling.net.cn/article/ceocog.html