3
\$\begingroup\$

Please review for performance

https://leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/727/

Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,2],

Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.

It doesn't matter what you leave beyond the returned length. Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],

Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.

It doesn't matter what values are set beyond the returned length.

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ArrayQuestions
{
    /// <summary>
    /// Remove Duplicates from Sorted Array
    /// https://leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/727/
    /// </summary>
    [TestClass]
    public class RemoveDuplicatesfromSortedArray
    {
        [TestMethod]
        public void RemoveDuplicates5()
        {
            int[] nums = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4};
            int[] excpected = {0, 1, 2, 3, 4};
            int res = RemoveDuplicates(nums);
            Assert.AreEqual(5,res);
            for (int i = 0; i < res; i++)
            {
                Assert.AreEqual(excpected[i], nums[i]);
            }
        }

        public int RemoveDuplicates(int[] nums)
        {
            if (nums.Length <= 1)
            {
                return nums.Length;
            }

            int current = nums[0];   //1
            int newLength = 1;          //2
            for (int i = 1; i < nums.Length; i++) // i = 5
            {
                if (nums[i] != current)
                {
                    nums[newLength] = nums[i];  //0,1,2
                    newLength++;
                    current = nums[i];
                }
                //else continue to next item
            }

            return newLength;
        }
    }
}
\$\endgroup\$
1
\$\begingroup\$

There is not much to review here. This algorithm looks to be as good as it gets. I don't know how much value there is in nitpicking, but here I go:

Review

  • The summary tag should be used to describe a type or a type member. Use remarks to add supplemental information (xmldoc summary) -> put the challenge URL in a remarks tag, not in the summary.
  • The challenge provides an input parameter nums but C# naming conventions don't invite you to use abbreviations. You could/should change its name to numbers.
  • Your unit test contains a variable with a typo excpected.
  • Your method is declared public, meaning you should check arguments against null to avoid the nasty NullReferenceException.
  • You've added alot of inline comments to show how the algorithm works. Considering the simplicity of the algorithm and the presence of unit tests, I feel these comments don't add much value to the code, if any at all //else continue to next item etc.
|improve this answer|||||
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.