分享

米哈游在上海真是神奇的存在,复旦员工都无法百分百进入米哈游。

 数据结构和算法 2024-04-27 发布于上海

一般来说高学历的同学找工作应该不难,可是最近一位网友说:米哈游在上海真是神奇的存在,复旦员工都无法百分百进入米哈游

他这言论一发表,其他网友不淡定了,有的网友就说:能力和学校无关,不能把毕业院校带来的平台能力当成自己的能力。还有的说:复旦一抓一大把,没啥好优越的。我们来看下各位网友的评论。

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第26题:删除有序数组中的重复项。

问题描述



来源:LeetCode第26题
难度:简单

给你一个非严格递增排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持一致 。然后返回 nums 中唯一元素的个数。

示例1:

输入:nums = [0,0,1,1,1,2,2,3,3,4]

输出:5, nums = [0,1,2,3,4]

解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。


  • 1 <= nums.length <= 3 * 10^4

  • -10^4 <= nums[i] <= 10^4

  • nums 已按非严格递增排列


问题分析



这题说的是在一个非严格递增的数组中,删除一些重复的元素,使每个元素只出现一次。这题比较简单,常见的解题思路是使用双指针。除了双指针以外还可以使用另一种解决方式。

我们来思考这样一个问题,因为原数组是非严格递增的,如果删除重复的元素(重复的元素只保留一个)之后,那么数组就是严格递增的了。所以我们在遍历原数组的时候,判断当前元素是否大于前面最后选择的元素,如果大于,我们就选择当前元素,这样我们就构造了一个严格递增的数组了。

JAVA:
public int removeDuplicates(int[] nums) {
    int index = 0;
    for (int num : nums)// 遍历所有元素
        if (index == 0 || num > nums[index - 1])// 是否递增
            nums[index++] = num;
    return index;
}

C++:
public:
    int removeDuplicates(vector<int> &nums) {
        int index = 0;
        for (int &num: nums)// 遍历所有元素
            if (index == 0 || num > nums[index - 1])// 是否递增
                nums[index++] = num;
        return index;
    }

C:
int removeDuplicates(int *nums, int numsSize) {
    int index = 0;
    for (int i = 0; i < numsSize; ++i) // 遍历所有元素
        if (index == 0 || nums[i] > nums[index - 1])// 是否递增
            nums[index++] = nums[i];
    return index;
}

Python:
def removeDuplicates(self, nums: List[int]) -> int:
    index = 0
    for num in nums:  # 遍历所有元素
        if index == 0 or num > nums[index - 1]:  # 是否递增
            nums[index] = num
            index += 1
    return index


笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多