玩轉演算法 陣列問題

2021-08-05 23:47:04 字數 3957 閱讀 9257

陣列問題

排序:選擇排序;插入排序;歸併排序;快速排序

查詢:二分查詢法

資料結構:棧;佇列;堆

……

如何寫出正確的程式

明確變數的含義

迴圈不變數

小資料量除錯

大資料量測試

leetcode

283.move zeros問題

給定乙個陣列nums,寫乙個函式,將函式中所有的0挪到陣列的末尾,而維持其他非0元素的相對位置.

舉例:nums = [0,1,0,3,12],函式執行後結果為[1,3,12,0,0]

**:

#include #include #include using namespace std;

class solution

}for(int i = 0; i < nonzeroelements.size(); i++)

for(int i = nonzeroelements.size(); i < nums.size(); i++)

}#endif

//方法2

//優化演算法,不需要接觸輔助空間

//時間複雜度o(n)

//空間複雜度o(1)

void movezeroes(vector& nums)

}//將nums剩餘的位置放置為0

for(int i = k; i < nums.size(); i++)

}//方法3

void movezeroes2(vector& nums)

else}}

}};int main();

vectorvec(arr,arr+sizeof(arr)/sizeof(int));

vectorvec2(arr,arr+sizeof(arr)/sizeof(int));

solution().movezeroes(vec);

solution().movezeroes2(vec2);

for(int i = 0; i < vec.size(); i++)

cout << endl;

for(int i = 0; i < vec2.size(); i++)

cout << endl;

return 0;

}

27.remove element

給定乙個陣列nums和乙個數值val,將陣列中所有等於val的元素刪除,並返回剩餘的元素個數.

需考慮的問題有:

·如何定義刪除?從陣列中去除?還是放在陣列末尾?

·剩餘元素的排列是否要保證原有的相對順序?

·是否有空間複雜度的要求?o(1)

#include #include #include using namespace std;

class solution

ele++;

}return count;

}};int main();

vectorvec(arr,arr+sizeof(arr)/sizeof(int));

int count = solution().removeelement(vec,3);

cout << count << endl;

for(int i = 0; i < count; i++)

cout << endl;

return 0;

}

26.remove duplicated from sorted array

給定乙個有序陣列,對陣列中的元素去重,使得原陣列中的每個元素只有乙個。返回去重陣列的長度值。

需考慮的問題有:

·如何定義刪除?從陣列中去除?還是放在陣列末尾?

·剩餘元素的排列是否要保證原有的相對順序?

·是否有空間複雜度的要求?o(1)

#include #include #include using namespace std;

class solution

ele++;

}nums[count] = nums[nums.size() - 1];

count++;

return count;

}};int main();

vectorvec(arr,arr+sizeof(arr)/sizeof(int));

int count = solution().removeduplicated(vec);

cout << count << endl;

for(int i = 0; i < count; i++)

cout << endl;

return 0;

}

80.remove duplicated from sorted array ii

給定乙個有序陣列,對陣列中的元素去重,使得原陣列的每個元素最多保留兩個,返回去重後陣列的長度值。

·如nums = [1,1,1,2,2,3]

·結果應返回5,且nums的前五個元素為1,1,2,2,3

#include #include #include using namespace std;

class solution

}ele1++;

ele2++;

}if(ele2 == nums.size() - 1)

return count;

}};int main();

vectorvec(arr,arr+sizeof(arr)/sizeof(int));

int count = solution().removeduplicated(vec);

cout << count << endl;

for(int i = 0; i < count; i++)

cout << endl;

return 0;

}

演算法 陣列連乘問題

乙個程度為n的陣列,現在要令 a 0 a 1 a 2 a n 1 a 1 a 0 a 2 a n 1 a 2 a 0 a 1 a n 1 a n 1 a 0 a 2 a n 2 條件是不能用除法,時間複雜度必須是線性。觀察一下題目,每乙個元素 i 都被更新成了a 0 到a n 1 除去 i 下標元素...

演算法 陣列指標問題

88.合併兩個有序陣列 給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。說明 初始化 nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1 有足夠的空間 空間大小大於或等於 m n 來儲存 n...

簡單演算法 陣列

1.給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。param nums return var removeduplicates function nums prices return var maxprofit function prices pa...