请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Leetcode #26 关于自己的代码

class Solution{

public:
    int removeDuplicates(vector<int> nums) {

        if (nums.size() == 0) return 0;

        int i = 0;

        for (int j = 1; j < nums.size(); j++) {
            if (nums[j] != nums[i]) {
                i++;
                nums[i] = nums[j];
            }
        }
        
        return i + 1;
    }

};

我调试的话{1,1,2} 的数据,会输出{1,2}
但是Leetcode显示结果是{1,1}
这个方法是根据Solution提出来的

想问一下到底出了什么问题

正在回答

3回答

liuyubobobo 2019-03-11 05:27:36

可能我没有特别理解你的问题。你的算法本身是错误的。


对于[1, 1, 2]这个数据,正确答案是[1, 2],你的程序运行结果是[1, 1]。


在本机测试一下试试看?


这个测试用例只有三个数据,执行的代码指令数也就10几条。仔细调试跟踪一下,看看为什么对于[1, 1, 2]这个测试用例,你的程序得到的结果是[1, 1],而不是[1, 2]?

调试程序可是学习算法,锻炼编程思维能力的重要方式哦。


加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕仰9094206 #1
    老师,我觉得我的代码没有错呀。这道题不是在考察去重吗?首先输出去重之后的数组长度i。另外就是要保证这个数组前i个元素都是去过重的。
    
    拿【1,1,2】来说,去重之后,应当输出【1,2】,长度为2。我上面的代码做到了这一点啊。
    
    但是我肯定是有问题的。所以我就想问【1,1】是怎么来的???
    
    辛苦老师啦!
    回复 有任何疑惑可以回复我~ 2019-03-11 20:13:20
  • 提问者 慕仰9094206 #2
    老师,我是在这个removeDuplicates方法里面,验证去重后的结果,的确是【1,1,2】是不是这样子不可以,必须要保证在main函数里面验证能成功才行?
    回复 有任何疑惑可以回复我~ 2019-03-11 20:54:03
  • liuyubobobo 回复 提问者 慕仰9094206 #3
    不可以,对于这个测试用例,你的结果必须是[1, 2, x],x是多少无所谓。最终返回2。返回的2表示,只有2个不重复的数字,所以不会看那个x。请仔细阅读题目对这个测试用例的解释。Leetcode现在有中文版。参考:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 加油!:)
    回复 有任何疑惑可以回复我~ 2019-03-12 00:39:02
慕粉3869017 2020-06-02 20:51:12


private int RemoveDuplicates(int[] nums) {
   int i=0;
   for (int j=0;j<nums.length;j++){
       if (nums[j]!=nums[i]){
           i++;
           nums[i] = nums[j];
       }

   }
   return i+1;
}

这样才对。j要从0开始

0 回复 有任何疑惑可以回复我~
MOCKINGT 2019-07-14 23:39:26

判断是否重复的条件错了

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信