-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdid-jump.js
More file actions
120 lines (98 loc) · 2.81 KB
/
did-jump.js
File metadata and controls
120 lines (98 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/**
* @param {number[]} nums
* @return {boolean}
*/
var loops = 0;
var canJump = function(nums) {
var memo = [];
var nLen = nums.length;
for (var j = 0; j < nLen; j++) {
memo[j] = j === nLen-1 ? "GOOD" : "UNKWN";
}
return canJumpFromPosition(0, nums);
function canJumpFromPosition(pos, _nums) {
loops++;
if (memo[pos] !== "UNKWN") {
return memo[pos] === "GOOD" ? true : false;
}
var furthestJump = Math.min(pos + _nums[pos], _nums.length-1);
console.log({pos, furthestJump});
for (var n = pos+1; n <= furthestJump; n++) {
if (canJumpFromPosition(n, _nums)) {
memo[pos] = "GOOD";
return true;
}
}
memo[pos] = "BAD";
return false;
}
};
var canJumpB = function(nums) {
return canJumpFromPosition(0, nums);
function canJumpFromPosition(pos, _nums) {
loops++;
if (pos === _nums.length-1) {
return true;
}
var furthestJump = Math.min(pos + _nums[pos], _nums.length-1);
console.log({pos, furthestJump});
for (var n = pos+1; n <= furthestJump; n++) {
if (canJumpFromPosition(n, _nums)) {
console.log({pos});
return true;
}
}
return false;
}
};
var canJumpC = function(nums) {
var nLen = nums.length;
var memo = Array(nLen);
nums.forEach((x, i) => { memo[i] = i == nLen-1 ? "GOOD":"TBD"; });
for (var pos = nLen-2; pos >= 0; pos--) {
var jumpScore = nums[pos];
var furthestJump = Math.min(pos + jumpScore, nLen-1);
for (var next = pos + 1; next <= furthestJump; next++) {
loops++;
if (memo[next] === "GOOD") {
memo[pos] = "GOOD";
break;
}
}
}
return memo[0] === "GOOD";
};
var canJumpD = function (nums) {
var last = nums.length;
for (var j = nums.length-1; j >= 0; j--) {
if (j + nums[j] >= last) {
last = j;
}
}
return last === 0;
};
// loops = 0;
// console.log("canJump");
// console.log(canJump([2,3,1,1,4]));
// console.log(canJump([3,2,1,0,4]));
// console.log(canJump([1]));
// console.log({loops});
//
// loops = 0;
// console.log("canJumpB");
// console.log(canJumpB([2,3,1,1,4]));
// console.log(canJumpB([3,2,1,0,4]));
// console.log(canJumpB([1]));
// console.log({loops});
loops = 0;
console.log("canJumpC");
console.log(canJumpC([2,3,1,1,4]));
console.log(canJumpC([3,2,1,0,4]));
// console.log(canJumpC([1]));
console.log({loops});
loops = 0;
console.log("canJumpD");
console.log(canJumpD([2,3,1,1,4]));
console.log(canJumpD([3,2,1,0,4]));
// console.log(canJumpC([1]));
console.log({loops});