【LeetCode记录】初级算法:数组之删除排序数组中的重复项
题目描述:
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
举例:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
思路:
因为不能创建新数组,所以只能组间元素进行比较,由于是排好序的,因此只需要比较相邻的两个元素就可以。如果相同,就删掉后一个元素,并使后面的元素都向前移一位。
因此该程序应该包含两个方法,【相同则删除元素】和【用后一个元素替换前一个元素】。
我原本是这么想的,但是用后一个元素替换前一个元素其实就是删除前一个元素的过程了,因此也只需要一个方法。
解答:
Python里面对于列表有方法remove,所以写起来很简洁。
class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ i = 0 while i < len(nums) - 1: if nums[i] == nums[i + 1]: nums.remove(nums[i]) else: i += 1 print(len(nums))
下面是用java实现的,思路是
public static void main(String[] args) { int[] nums = {0,0,1,1,1,2,2,3,3,4,4,5}; int i = 0; for(int j = 1;j< nums.length-1; j++){ if(nums[j] != nums[j+1]) i++; nums[i] = nums[j]; } System.out.println(i+1); }
可以发现对数组内容进行的比较是【j】从下标为1的元素开始比较,程序最后返回的是i+1,因为当第一个不相等出现的时候,不相等的元素是2个。