昆山市建设局网站6手机系统优化工具
我的做法:
使用一个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;}
};