1. 程式人生 > >【leetcode】27. Remove Element(easy)

【leetcode】27. Remove Element(easy)

將指定值的元素移動到最後,並返回修改後陣列的size。元素可以無序

不知道為啥時間複雜度堪憂。程式碼確實複雜了點,也可能是題目的要求沒看懂

//27. Remove Element
int removeElement(vector<int>& nums, int val) {
	int lastPos = 0; // 最後一個可以交換位置 距離最後一個的距離,初始為0
	int len = 0;
	int sz = nums.size();
	if (sz == 0)
		return 0;
	for (int i = 0; i < sz - lastPos; ++i)
	{
		if (nums[i] == val )
		{
			int swapPos = sz - lastPos - 1;
			for (int j = swapPos; j > 0; --j)
			{
				if (nums[j] != val)
				{
					break;
				}
				else
				{
					swapPos--;
				}
			}

			if (swapPos <= i)
				return len; // 如果計算的交換的位置 在當前遍歷的位置之前,說明整個遍歷已經結束,直接返回

			int temp = nums[swapPos];
			nums[swapPos] = nums[i];
			nums[i] = temp;
			lastPos = sz - swapPos;
			len++;
		}
		else
		{
			len++;
		}
	}
	return len;
}