Compare Version Numbers - Built-in Functions & Two Pointers Approach

Description

Approach 1: Built-In Functions

n = version1.length, m = version2.length
Time Complexity: O(n + m) 82ms
Space Complexity: O(n + m) 41.4MB

var compareVersion = function(version1, version2) {
  let v1 = version1.split("."), v2 = version2.split(".");
  let n = Math.max(v1.length, v2.length);
  for (let i = 0; i < n; i++) {
    let r1 = i >= v1.length ? 0 : +v1[i];
    let r2 = i >= v2.length ? 0 : +v2[i];
    if (r1 < r2) return -1;
    else if (r1 > r2) return 1;
  }
  return 0;
};

Approach 2: Two Pointers - No Built-In Functions

Leading zeros case:
e.g: 0012
r1 = 0
0: r1 * 10 + 0 = 0
0: r1 * 10 + 0 = 0
1: r1 * 10 + 1 = 1
2: r1 * 10 + 2 = 12
r1 = 12

Multiplying 0 with anything results in 0, so the leading zeros are disregarded.

Time Complexity: O(max(n, m)) 86ms
Space Complexity: O(1) 41.7MB

var compareVersion = function(version1, version2) {
  let n = version1.length, m = version2.length;
  let i = 0, j = 0;
  while (i < n || j < m) {
    let r1 = 0, r2 = 0;
    while (i < n && version1[i] !== '.') { // get the integer from version1
      r1 = r1 * 10 + +version1[i++];
    }
    while (j < m && version2[j] !== '.') { // get the integer from version2
      r2 = r2 * 10 + +version2[j++];
    }
    if (r1 < r2) return -1;
    else if (r1 > r2) return 1;
    i++, j++; // pass the '.'
  }
  return 0;
};

javascript

Comments

Popular posts from this blog

Maximum Value of an Ordered Triplet II - Two Solutions [JS]

Maximum Sum of Distinct Subarrays With Length K - Sliding Window w/ Two Pointers & Set [JS]

Sum of Prefix Scores of Strings - Trie [JS]

Count Subarrays With Median K - Count Left & Right Balance [JS]

Reschedule Meetings for Maximum Free Time I - Sliding Window - Constant Space [JS]