26.从排序的数组中删除重复项
#100daysofcode #java #算法 #leetcode

问题声明:
给定一个以非缩放顺序排序的整数数组数字,将重复项定为就地,以使每个唯一元素仅出现一次。元素的相对顺序应保持不变。然后返回数字中的唯一元素的数量。

考虑要接受的数字唯一元素的数量,您需要做以下操作:

更改数组数字,以使数字的第一个k元素最初以它们在数字中的顺序包含唯一元素。数字的其余元素并不重要,而且数字的大小。
返回k。

自定义法官:

法官将使用以下代码测试您的解决方案:

int[] nums = [...]; // Input array
int[] expectedNums = [...]; // The expected answer with correct length

int k = removeDuplicates(nums); // Calls your implementation

assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
    assert nums[i] == expectedNums[i];
}

如果所有断言通过,则您的解决方案将被接受。

示例1:
输入: nums = [1,1,2]
输出: 2,nums = [1,2,_]
说明:您的函数应返回k = 2,NUM的前两个要素分别为1和2。
除了返回的K之外,您留下的东西都没关系(因此它们是强调的)。

示例2:
输入: nums = [0,0,1,1,1,1,2,2,2,3,3,4]
输出: 5,nums = [0,1,2,3,4,,_]
说明:您的功能应返回k = 5,NUM的前五个要素分别为0、1、2、3和4。
除了返回的K之外,您留下的东西都没关系(因此它们是强调的)。

约束:

  • 1 <= nums.length <= 3 * 104
  • -1 <= nums [in] = 100 < / / li>
  • nums以非调整顺序排序。

解决方案:

class Solution {
    public int removeDuplicates(int[] nums) {
int i=0;
        for(int j=1;j<nums.length;j++){
            if(nums[i]!=nums[j]){
                i++;
                nums[i]=nums[j];
            }    
        }

        return i+1;
    }
}