题目:
题解:
思路:用栈模拟相邻元素之间的删除操作即可。
代码如下:
class Solution {
public:
// 题目要求是删除某个元素后,其左边元素的位置不变,而将右边的元素向左平移补全空缺,所以显然要将左边元素放在栈中才能有效的满足题意
int minDeletion(vector& a) {
int n=a.size();
// 模拟栈,以及初始化栈
vector st;st.push_back(a[0]);
for(int i=1;i
int idx=st.size()-1;
// 下标为奇数,直接入栈
if(idx&1)st.push_back(a[i]);
// 下标为偶数,还需判断栈顶元素与当前遍历的元素不相等才能入栈
else if(st.back()!=a[i]){
st.push_back(a[i]);
}
}
// 栈中的元素个数必须只能有偶数个
return st.size()&1?n-st.size()+1:n-st.size();
}
};


![[栈]leetcode2216:美化数组的最少删除数(medium) [栈]leetcode2216:美化数组的最少删除数(medium)](http://www.mshxw.com/aiimages/31/921054.png)
