Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0550332

Browse files
committed
add more solutions (up to #230)
1 parent 695a055 commit 0550332

15 files changed

+505
-0
lines changed

‎solutions/146_LRUCache.js‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @param {number} capacity
3+
*/
4+
var LRUCache = function(capacity) {
5+
this.capacity = capacity;
6+
this.map = new Map();
7+
};
8+
9+
/**
10+
* @param {number} key
11+
* @return {number}
12+
*/
13+
LRUCache.prototype.get = function(key) {
14+
let val = this.map.get(key)
15+
if(val == undefined){return -1;}
16+
//Map has sorted order. FIFO.
17+
this.map.delete(key);
18+
//we get value and push it to the back;
19+
this.map.set(key,val);
20+
return val;
21+
};
22+
23+
/**
24+
* @param {number} key
25+
* @param {number} value
26+
* @return {void}
27+
*/
28+
LRUCache.prototype.put = function(key, value) {
29+
//remove value if exists.
30+
if(this.map.has(key)){
31+
this.map.delete(key)
32+
}
33+
this.map.set(key,value);
34+
let keys = this.map.keys();
35+
while(this.map.size > this.capacity){
36+
//remove Least Recently Used elements
37+
this.map.delete(keys.next().value)
38+
}
39+
};
40+
41+
/**
42+
* Your LRUCache object will be instantiated and called as such:
43+
* var obj = new LRUCache(capacity)
44+
* var param_1 = obj.get(key)
45+
* obj.put(key,value)
46+
*/

‎solutions/148_SortList.js‎

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val) {
4+
* this.val = val;
5+
* this.next = null;
6+
* }
7+
*/
8+
/**
9+
* @param {ListNode} head
10+
* @return {ListNode}
11+
*/
12+
var sortList = function(head) {
13+
function mergeSort(node){
14+
if(!node || !node.next){
15+
return node;
16+
}
17+
let middle = getMiddle(node);
18+
let next_to_middle = middle.next;
19+
//divide in the middle;
20+
middle.next = null;
21+
let left = mergeSort(node)
22+
let right = mergeSort(next_to_middle);
23+
let merged_list = merge(left,right);
24+
return merged_list;
25+
}
26+
function merge(left,right){
27+
let result = null
28+
if(!left){
29+
return right;
30+
}
31+
if(!right){
32+
return left;
33+
}
34+
if(left.val<=right.val){
35+
result = new ListNode(left.val);
36+
result.next = merge(left.next,right)
37+
} else{
38+
result = new ListNode(right.val);
39+
result.next = merge(left,right.next);
40+
}
41+
return result;
42+
}
43+
44+
function getMiddle(node){
45+
if(!node){
46+
return null
47+
}
48+
let slow = node;
49+
let fast = node.next;
50+
// fast are moving 2 times faster. so when it comes to the end,
51+
// slow will be in the middle
52+
while(fast!=null){
53+
fast = fast.next;
54+
if(fast!=null){
55+
slow = slow.next;
56+
fast = fast.next;
57+
}
58+
}
59+
return slow;
60+
}
61+
return mergeSort(head)
62+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var findMin = function(nums) {
6+
let l_pointer = 0;
7+
let r_pointer = nums.length-1;
8+
while(l_pointer < r_pointer){
9+
let half = l_pointer + Math.floor((r_pointer-l_pointer)/2)
10+
if(nums[half] > nums[r_pointer]){
11+
l_pointer = half + 1
12+
} else {
13+
r_pointer = half
14+
}
15+
}
16+
return nums[l_pointer]
17+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution(object):
2+
def findMin(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: int
6+
"""
7+
l_pointer = 0
8+
r_pointer = len(nums)-1
9+
while l_pointer < r_pointer:
10+
half = l_pointer + (r_pointer - l_pointer) // 2
11+
if nums[half] > nums[r_pointer]:
12+
l_pointer = half + 1
13+
else:
14+
r_pointer = half
15+
16+
return nums[l_pointer]
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val) {
4+
* this.val = val;
5+
* this.next = null;
6+
* }
7+
*/
8+
9+
/**
10+
* @param {ListNode} headA
11+
* @param {ListNode} headB
12+
* @return {ListNode}
13+
*/
14+
var getIntersectionNode = function(headA, headB) {
15+
let head1 = headA;
16+
let head2 = headB;
17+
let result = null;
18+
19+
let count1 = getCount(head1);
20+
let count2 = getCount(head2);
21+
if(count1<count2){
22+
let diff = count2-count1;
23+
result = getIntersectionPoint(diff, head2, head1);
24+
} else{
25+
let diff = count1 - count2;
26+
result = getIntersectionPoint(diff, head1, head2);
27+
}
28+
29+
function getIntersectionPoint(diff, bigger, smaller){
30+
let current1 = bigger;
31+
let current2 = smaller;
32+
for(let i = 0; i<diff;i++){
33+
if(!current1){
34+
return null;
35+
}
36+
current1 = current1.next;
37+
}
38+
while(current1 && current2){
39+
if(current1 === current2){
40+
return current1
41+
}
42+
current1 = current1.next;
43+
current2 = current2.next;
44+
}
45+
46+
return null;
47+
}
48+
49+
50+
function getCount(head){
51+
let count = 0;
52+
let curr = head;
53+
while(curr){
54+
count = count+1;
55+
curr = curr.next;
56+
}
57+
return count;
58+
}
59+
return result;
60+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param {number[]} numbers
3+
* @param {number} target
4+
* @return {number[]}
5+
*/
6+
var twoSum = function(numbers, target) {
7+
let left = 0;
8+
let right = numbers.length - 1;
9+
let dict = {}
10+
while(left<=right){
11+
if(numbers[left]+numbers[right]===target){
12+
return [left+1,right+1]
13+
} else if(numbers[left]+numbers[right]<target){
14+
left++
15+
} else {
16+
right--
17+
}
18+
}
19+
return []
20+
};
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val) {
4+
* this.val = val;
5+
* this.left = this.right = null;
6+
* }
7+
*/
8+
/**
9+
* @param {TreeNode} root
10+
*/
11+
var BSTIterator = function(root) {
12+
function inorderTraversal(root){
13+
if(root){
14+
inorderTraversal(root.left)
15+
_ordered_nodes.push(root.val);
16+
inorderTraversal(root.right)
17+
}
18+
}
19+
let _ordered_nodes = [];
20+
inorderTraversal(root);
21+
this.ordered_nodes = _ordered_nodes;
22+
this.index = -1;
23+
};
24+
25+
/**
26+
* @return the next smallest number
27+
* @return {number}
28+
*/
29+
BSTIterator.prototype.next = function() {
30+
this.index = this.index+1;
31+
return this.ordered_nodes[this.index]
32+
};
33+
34+
/**
35+
* @return whether we have a next smallest number
36+
* @return {boolean}
37+
*/
38+
BSTIterator.prototype.hasNext = function() {
39+
return this.index+1 < this.ordered_nodes.length
40+
};
41+
42+
/**
43+
* Your BSTIterator object will be instantiated and called as such:
44+
* var obj = new BSTIterator(root)
45+
* var param_1 = obj.next()
46+
* var param_2 = obj.hasNext()
47+
*/
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val) {
4+
* this.val = val;
5+
* this.left = this.right = null;
6+
* }
7+
*/
8+
/**
9+
* @param {TreeNode} root
10+
* @return {number[]}
11+
*/
12+
var rightSideView = function(root) {
13+
var result = [];
14+
var max_level = [0]
15+
function helper(root, current_level, max_level){
16+
if(root){
17+
if(max_level[0] < current_level){
18+
result.push(root.val);
19+
max_level[0] = current_level
20+
}
21+
22+
// if right view : right -> left
23+
// if left view : left -> right
24+
helper(root.right, current_level + 1, max_level)
25+
helper(root.left, current_level + 1, max_level)
26+
}
27+
28+
}
29+
helper(root,1,max_level);
30+
return result
31+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Solution(object):
9+
def rightSideView(self, root):
10+
"""
11+
:type root: TreeNode
12+
:rtype: List[int]
13+
"""
14+
max_level = [0]
15+
result = []
16+
self.helper(root, max_level, 1, result)
17+
return result
18+
19+
def helper(self, root, max_level, current_level, result):
20+
if root:
21+
if max_level[0] < current_level:
22+
result.append(root.val)
23+
max_level[0] = current_level
24+
25+
self.helper(root.right, max_level, current_level+1, result)
26+
self.helper(root.left, max_level, current_level+1, result)
27+

‎solutions/200_NumberofIslands.js‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @param {character[][]} grid
3+
* @return {number}
4+
*/
5+
var numIslands = function(grid) {
6+
let count = 0;
7+
function dfs(grid, i, j){
8+
if(i<0 || i >= grid.length || j < 0 || j >=grid[0].length || grid[i][j] != '1'){
9+
return;
10+
}
11+
grid[i][j] = '#' // mark as visited can be marked as 0
12+
dfs(grid,i+1,j);
13+
dfs(grid,i-1,j);
14+
dfs(grid,i,j+1);
15+
dfs(grid,i,j-1);
16+
}
17+
for(let i = 0;i<grid.length;i++){
18+
for(let j =0;j<grid[0].length;j++){
19+
if(grid[i][j]=='1'){
20+
dfs(grid,i,j)
21+
count = count + 1
22+
}
23+
}
24+
}
25+
return count
26+
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /