开始每天必须刷两道算法题, 具体题目可参考https://www.acwing.com/activity/content/record/40/1/
AC817: 数组去重
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1005;
int q[N];
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i ++) {
cin >> q[i];
}
sort(q, q+n);
int k = 1;
for(int i = 1; i < n; i ++) {
if(q[i] != q[k-1]) {
q[k++] = q[i];
}
}
cout << k << endl;
return 0;
}
LC80: 删除有序数组重复元素
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length <= 2) return nums.length;
int len = nums.length;
int k = 1;
int count = 1;
for(int i = 1; i < len; i ++) {
if(nums[i] != nums[k-1]) {
nums[k ++] = nums[i];
count = 1;
} else {
if(count >= 2) continue;
else {
count ++;
nums[k ++] = nums[i];
}
}
}
return k;
}
}
总结: 两道题目主要是使用双指针, 核心代码是a[i] = a[k-1]
, 体验双指针技巧的迭代过程和魅力~~~