文章目錄
- 删除排序數組中的重複項
-
- java解決
- python
- 也可以一行搞定
- 移除元素
-
- java解決方案
- python解決方案
删除排序數組中的重複項
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)
也可以一行搞定
移除元素
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)