顺序表——leetcode

顺序表——leetcode_第1张图片
原地删除数据

顺序表——leetcode_第2张图片
我们的思路这里给的是双指针,给两个指针,从前往后移动,如果不是val就覆盖,如果是我就跳过,大家一定要看到我们的条件是原地修改,所以我们不能另开一个数组来实现我们这道题目。
顺序表——leetcode_第3张图片
这里我们给两个数组,一个是dst,一个就是我们的src,我们让src往后移动,遇到val就++,如果不是val我们就覆盖,大家也看到我们今天的主题是顺序表,说明我们的题目内容也最好和顺序表有点关系,顺序表的本质就是数组,所以我们这里还是用数组下标来访问可能更好,当然指针肯定也能实现。

int removeElement(int* nums, int numsSize, int val){
        int dst = 0;
        int src = 0;
        while(src < numsSize)
        {
            if(nums[src] != val)
            {
                nums[dst++] = nums[src++];
            }
            else
            {
                src++;
            }
        }
        return dst;
}

这样我们的代码就能通过,这里我们还需要做的就是返回这个数组的有效数据,这里我建议大家自己举例子来说明,我的想法是我们每次覆盖之后dst都会++,所以dst指向的位置应该是有效位置的后一个,因为我们的数组下标是从0开始的,所以还是dst,但是dst指向的是有效数据的后一位。

删除有效的数据的重复项
顺序表——leetcode_第4张图片

int removeDuplicates(int* nums, int numsSize){
        int dst = 0;
        int src = 0;
        while(src < numsSize)
        {
            if(nums[dst] != nums[src])
            {
                nums[++dst] = nums[src++];
            }
            else
            {
                
                src++;
            }
        }
        return dst+1;
}

其实这里还是双指针的思路,如果相同我们就src++,不同的话我们先让dst++,然后再进行覆盖

顺序表——leetcode_第5张图片
其实大家自己去移动控制就可以算出来了,这里大家也可以让src从1开始,从1开始的话可能好比较一点,但是我们的思路是大差不差。

合并有序数组

顺序表——leetcode_第6张图片
首先我们看题目,可以想出两种做题的思路,第一种就是我们可以重新开辟一个空间,然后我们还是继续用双指针的办法,给两个指针指向我们nums1和nums2开始的地方,然后比较小,谁小谁先放入,一个到尾巴就结束,然后把剩下的放进去就可以了,但是我们这里看到数组1的空间其实足够大,那我们就不用考虑这么多,我们可以再nums1中进行操作。

顺序表——leetcode_第7张图片
我们比较谁大就放到后面去,然后有一个end变成0就得结束了,要不然会越界。


void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
        int end1 = m - 1;
        int end2 = n - 1;
        int tail = m + n -1;
        while(end1 >= 0 && end2 >= 0)
        {
            if(nums1[end1] > nums2[end2])
            {
                nums1[tail--] = nums1[end1--];
            }
            else
            {
                nums1[tail--] = nums2[end2--];
            }
        }
        while(end2 >= 0)
        {
            nums1[tail--] = nums2[end2--];
        }
}

顺序表——leetcode_第8张图片

10月底了,学校课真的好多,想旷课但是要点名,真的好烦,进度慢了好多了这个月,再加上手骨裂了,敲代码慢很多唉。

你可能感兴趣的:(leetcode,算法,职场和发展)