织梦如何一个后台做两个网站班玛县公司网站建设
我的做法:
 使用一个index作为检查坐标,当index为偶数时检查当前数和后一个数是否相等,相等的话,后一个数设置为-1,注意如果相等,要把相等的数保留下来last,以便接下来检查,防止出现2333这种连续的情况,但是当接下来检查通过要及时把保留数last变回初识值。另外要注意遍历到数组最后一个元素时,就不用判断了。
class Solution {
public:int minDeletion(vector<int>& nums) {int cnt = 0;int n = nums.size();int index = -1, last = -1;for (int i = 0; i < n; ++i) {if (nums[i] == last && index % 2 == 0) {nums[i] = -1;++cnt;} else if (nums[i] != -1) {++index;} else {continue;}if (i == n - 1) break;if (index % 2 == 0) {if (nums[i] == nums[i + 1]) {nums[i + 1] = -1;last = nums[i];++cnt;} else {continue;}} else {continue;}}if ((index + 1) % 2 != 0) {++cnt;}return cnt;}
};
 
其中,很多continue语句可以省略。
 更简单的写法:
 其实相当于用cnt代替index进行计数了,变换后的数组长度等于n-cnt
class Solution {
public:int minDeletion(vector<int>& nums) {int n = nums.size(), cnt = 0;for (int i = 0; i < n; ++i) {if (i < n - 1 && (i - cnt) % 2 == 0 && nums[i] == nums[i + 1]) {++cnt;}}return (n - cnt) % 2 == 0 ? cnt: cnt + 1;}
};
