Compare Version Numbers - Built-in Functions & Two Pointers Approach
- Get link
- X
- Other Apps
By
Anna An
on
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
- Get link
- X
- Other Apps
Comments
Post a Comment