LeetCode: 26. Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each
element appear only once and return the new length.Do not allocate extra space for another array, you must do this in
place with constant memory.For example, Given input array nums = [1,1,2],
Your function should return length = 2, with the first two elements of
nums being 1 and 2 respectively. It doesn’t matter what you leave
beyond the new length.
自己的答案,16ms:
public class Solution {
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int result = 1;
int i = 1;
while (i < nums.length) {
if (nums[i-1] == nums[i]) {
i++;
continue;
}
nums[result] = nums[i];
result++;
i++;
}
return result;
}
}
15: iload_3
16: aload_1
17: arraylength
18: if_icmpge 53
21: aload_1
22: iload_3
23: iconst_1
24: isub
25: iaload
26: aload_1
27: iload_3
28: iaload
29: if_icmpne 38
32: iinc 3, 1
35: goto 15
38: aload_1
39: iload_2
40: aload_1
41: iload_3
42: iaload
43: iastore
44: iinc 2, 1
47: iinc 3, 1
50: goto 15
最快的答案,11ms:
public class Solution {
public int removeDuplicates(int[] A) {
int n=A.length;
if(n < 2) return n;
int id = 1;
for(int i = 1; i < n; ++i)
if(A[i] != A[i-1]) A[id++] = A[i];
return id;
}
}
15: iload 4
17: iload_2
18: if_icmpge 50
21: aload_1
22: iload 4
24: iaload
25: aload_1
26: iload 4
28: iconst_1
29: isub
30: iaload
31: if_icmpeq 44
34: aload_1
35: iload_3
36: iinc 3, 1
39: aload_1
40: iload 4
42: iaload
43: iastore
44: iinc 4, 1
47: goto 15