首页 > 其他分享 >leet code 删除有序数组中的重复项 I II

leet code 删除有序数组中的重复项 I II

时间:2023-09-15 22:34:28浏览次数:37  
标签:leet code nums int II right 数组 指针 left

26.删除有序数组中的重复项 80.删除有序数组中的重复项 II

总结反思

这两个题目,虽然难度程度一个是简单,一个是中等,都不是特别难。但是都没有解决。 因为这两道题目都是运用双指针解决的,证明自己对双指针的掌握程度还不是很熟练。

反思:为什么没有解出来?又或者,经过一段时间之后是否能够解出来?

  • 我想如果不能透彻掌握双指针,怕是还没有办法解出来
  • 那么我缺少了什么?
  • 没有在脑海中或者草纸上构造出完整的思路流程,耐心不足。
  • 那么现在在草纸上去完善一下完整的思路流程
  • 如下图

leet code 删除有序数组中的重复项 I II_有序数组

  • 整个流程通过简单示例画出来之后,这样代码也变得好实现了

26.show code

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        int left = 0,right = 1;
        while(right < n) {
            if(nums[left] != nums[right]) {
                left++;
                nums[left] = nums[right];
            }
            right++;
        }
        return left + 1;
    }
}

80.删除有序数组中的重复项 II

  • 26 题目的进阶版本,那么还是老样子,首先在草稿纸上进行演算。
  • 把整个过程给过一遍,这样的话自然而然理解地更加透彻了。如下图。

leet code 删除有序数组中的重复项 I II_数组_02

  • 与第 26 题不同的是,最终返回的是 left 指针的位置,不用再 +1

show code

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        // 这里数组的长度如果是  1 ,那么直接返回 left 是错误的.
        if(n <= 2) {
            return n;
        }
        int left = 2,right = 2;
        while(right < n) {
            if(nums[left - 2] != nums[right]) {
                nums[left] = nums[right];
                left++;
            }
            right++;
        }
        return left;
    }
}

总结反思

  • 遇到题目的时候不要急
  • 一定要把整体思路想透彻了,再动手
  • 然后每完成一道题,要多总结,争取做到做一道透彻掌握一道

标签:leet,code,nums,int,II,right,数组,指针,left
From: https://blog.51cto.com/u_16079703/7488045

相关文章

  • Codeforces Round 764 (Div. 3) B. Make AP
    有三个正整数\(a,b,c\)。需要执行以下操作严格一次:选择任意一个正整数\(m\)并让严格一个\(a,b,c\)之一乘以\(m\)。但不能改变他们的顺序。回答是否可以经过一次操作后使\(a,b,c\)变为等差。分类讨论题:三种情况满足一种即可。(已知\(a,b,c\geq1\))\(ma......
  • Codeforces Round 773 (Div. 2) B. Power Walking
    有\(n\)个增幅道具,第\(i\)个道具种类为\(a_i\),一个人的强度\(w\)为他所有道具的种类数。对于\(k]\in[1,n]\),询问将\(n\)个道具分配给\(k\)个人且每个人至少分配到一个道具后,能够得到的最想强度和\(\sum_{i=1}^{n}w_i\)。观察一:最低强度和\(\sum_{i=1}^{k}w......
  • AtCoder Grand Contest 063
    PrefaceAGC好难啊,这场补完最近就没啥比赛好补了,接下来去训练下专题吧像C题这种美妙的人类智慧题感觉以我的脑子一辈子也想不出来wwwA-MexGame对于任意一段前缀,我们可以求出对应的每个人的操作次数以及每个人拥有的位置数考虑Alice的最优策略一定是从小到大地放入Bob对应......
  • Educational Codeforces Round 100
    B.FindTheArray对于条件二来说,1是万金油的存在,所以我们只需要把奇数位置或偶数位置全部变成1即可。因为要求差值小于\(\fracs2\),所以我可以求出奇偶位的和修改较小值即可。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingpii=pair<in......
  • 【代码随想录算法训练营第二天】977.有序数组的平方、209.长度最小的子数组 、59.螺旋
    Day2-数组2023.9.15Leetcode977有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。初解我还是不能想到暴力解法之外的,对某个问题的最优复杂度也没有概念。就算提示我是用指针,我也想不到思路。现在我知......
  • 前端生成二维码,qrcode使用说明,canvas查看大图
    生成二维码用于vue项目通过字符串转换生成二维码的三方插件安装插件npminstall--saveqrcode引入使用importQRCodefrom"qrcode"页面<!--放置二维码的容器--><canvas:id="'qrCode_id'+stringxxxxx"class="qrCode_style"></canvas><!--可......
  • markdown使用vscode生成目录
    要想用vscode生成目录,按照如下步骤执行即可:需要先安装插件MarkdownAllinone在想要插入目录的地方快捷键Ctrl+Shift+P然后在弹出的框里面输入TOC3.选择命令createtableofcontents就完成了目录生成如果想要导出为Html页面的话输入Ctrl+Shift+P然后在弹出的......
  • UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in positio
    写入文件报错UnicodeEncodeError:'gbk'codeccan'tencodecharacter'\ufffd'inposition2494:illegalmultibytesequence 解决方法  withopen('./abc.html','w',encoding='utf-8')asfp: fp.write(respone......
  • leetcode1466
    分析:它是有n个节点,n-1条边所以两个节点连接的边只有一条,那么要么是可以从这条边的起点开始能够到达0,要么是不能,不会有回路的情况对于数据结构使用哈希表值为vector容器intbfs(vector<vector<int>>&connections){unordered_map<int,vector<int>>m;for(auto&v:co......
  • 删除有序数组中的重复项 II
    题目删除有序数组中的重复项II给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。说明:为什么返回数值是整数,但输......