My code:
public class Solution {
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0)
return 0;
int del = 0;
int count = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] == nums[i - 1]) {
count++;
if (count > 2)
del++;
else
nums[i - del] = nums[i];
}
else {
count = 1;
nums[i - del] = nums[i];
}
}
return nums.length - del;
}
public static void main(String[] args) {
Solution test = new Solution();
int[] a = {1, 1, 1, 1, 3, 3};
System.out.println(test.removeDuplicates(a));
}
}
My test result:
這次作業(yè)不難井辜,主要是直接看了此題的簡(jiǎn)單版本的代碼绎谦,以前做過(guò)。然后有了思路粥脚。這題變形在窃肠,允許最多出現(xiàn)兩次,那么就用一個(gè)count來(lái)計(jì)數(shù)就行了阿逃,超過(guò)兩次就開始刪除铭拧。然后不超過(guò)又相等的話赃蛛,這里就有個(gè)細(xì)節(jié)恃锉,就需要不停地往前移搀菩,往前覆蓋。
**
總結(jié): Array, two pointer
**
Anyway, Good luck, Richardo!
My code:
public class Solution {
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0)
return 0;
int del = 0;
int counter = 1; // used to record the number of elements with same values
/** traverse the whole array */
for (int i = 1; i < nums.length; i++) {
if (nums[i] == nums[i - 1]) {
if (counter >= 2) {
del++; // if count >= 2, increase del by 1
}
else {
nums[i - del] = nums[i]; // if not, move repetive element to front
}
counter++; // count the repetive elements
}
else {
nums[i - del] = nums[i];
counter = 1; // resotre counter
}
}
return nums.length - del;
}
}
差不多的做法破托,沒什么好說(shuō)的肪跋。
Anyway, Good luck, Richardo!
My code:
public class Solution {
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int del = 0;
int counter = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] == nums[i - 1]) {
counter++;
if (counter > 2) {
del++;
}
else {
nums[i - del] = nums[i];
}
}
else {
counter = 1;
nums[i - del] = nums[i];
}
}
return nums.length - del;
}
}
差不多的解法。
Anyway, Good luck, Richardo! -- 09/04/2016