删除排序数组中的重复项
java解决
1.排序后比较
对数组进行排序,然后遍历数组,
如果 i +1 = i 的value 就把这个数弹出.
因为排序了,所以 遇到不相等的数以后1,说明后面不会出现相等的数,所以返回.
class Solution {
public static int removeDuplicates(int[] nums) {
if(nums.length==0){return 0;}
if(nums.length==1){return 1;}
int size = nums.length;
Arrays.sort(nums);
for(int i = 0;i<size-1;i++){
if(nums[i]==nums[i+1]&&i+1!=size) {
for (int j = i + 1; j < size; j++) {
nums[j - 1] = nums[j];
}
size--;
i--;
}
}
return size;
}
}
2.双指针遍历,
制作内外两个指针,依次比较,每遇到相同的数
就把这个数之后所有数, 往前移一个, 长度指针减1
class Solution {
public static int removeDuplicates(int[] nums) {
if(nums.length==0){return 0;}
if(nums.length==1){return 1;}
int size = nums.length;
for(int i = 0;i<size-1;i++){
for(int j = size-1;j>i;j--){
if(nums[i]==nums[j]){
size--;
}
}
}
System.out.println(Arrays.toString(nums));
return size;
}
python
1.排序,循环比较,因为python有list而没有数组,所以这个题可以直接pop
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
a = 0
b = 1
nums.sort()
while b < len(nums):
if nums[a] == nums[b]:
nums.pop(a)
else:
a += 1
b += 1
return len(nums)
2.set集合
集合自身有去重
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
nums[:] = list(sorted(set(nums)))
return len(nums)
也可以一行搞定
return len(list(set(nums)))
移除元素
java解决方案
1.遍历
当遇到要找的元素时,把后面的所有元素向前移动一个位置
class Solution {
public int removeElement(int[] nums, int val) {
if (nums.length==0){
return 0;
}
int size = nums.length;
for(int i = 0;i<size;i++){
if(val==nums[i]){
int p = i+1;
for(int j = p;j<size;j++){
nums[j-1]=nums[j];
}
size--;
i--;
}
}
return size;
}
}
python解决方案
直接找,找到了弹出去
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
i = 0
while i<len(nums):
if nums[i] == val:
nums.pop(i)
else:
i+=1
return len(nums)