Skip to content

Commit 6a7225c

Browse files
committed
feat: Solved 15 Leetcode problems
1 parent fa71158 commit 6a7225c

16 files changed

+590
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @param {string[]} logs
3+
* @return {number}
4+
*/
5+
var minOperations = function(logs) {
6+
const moveToFolder = i=>{
7+
const path = logs[i].substring(0,logs[i].length-1)
8+
9+
return path[0]==='.'?"":path
10+
}
11+
const moveToParentFolder= ()=>{
12+
const lastIdx = currDirectory.lastIndexOf('/')
13+
14+
if(lastIdx>=0)
15+
currDirectory=currDirectory.substring(0, lastIdx)
16+
else
17+
currDirectory=""
18+
}
19+
20+
let currDirectory=moveToFolder(0)
21+
22+
for(let idx=1;idx<logs.length;idx++)
23+
{
24+
if(logs[idx].charAt(0)!=='.'){
25+
if(currDirectory.length!==0)
26+
currDirectory=[currDirectory,moveToFolder(idx)].join('/')
27+
else
28+
currDirectory=moveToFolder(idx)
29+
continue
30+
}
31+
32+
if(logs[idx].charAt(1)!=='.')
33+
continue
34+
35+
moveToParentFolder()
36+
}
37+
38+
console.log(currDirectory)
39+
let counter=currDirectory.length>0?1:0
40+
41+
for(let c of currDirectory)
42+
if(c==='/')
43+
counter++
44+
45+
return counter
46+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution:
2+
def averageWaitingTime(self, customers: List[List[int]]) -> float:
3+
arrival=None
4+
time=None
5+
currTime=None
6+
totalTime=0
7+
idx=0
8+
9+
arrival,time = customers[idx]
10+
totalTime+=time
11+
currTime=arrival+time
12+
idx+=1
13+
14+
while idx<len(customers):
15+
arrival, time=customers[idx]
16+
17+
if currTime-arrival>=0:
18+
totalTime+=currTime+time-arrival
19+
currTime+=time
20+
else:
21+
totalTime+=time
22+
currTime=time+arrival
23+
24+
idx+=1
25+
26+
return totalTime/len(customers)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution:
2+
def findTheWinner(self, n: int, k: int) -> int:
3+
if k==1:
4+
return n
5+
6+
players = [i+1 for i in range(0,n)]
7+
idx=0
8+
maxIdx = n-1
9+
10+
while len(players)>1:
11+
moveCounter=1
12+
13+
while moveCounter<k:
14+
idx=idx+1 if idx<maxIdx else 0
15+
moveCounter+=1
16+
17+
print(players[idx])
18+
del players[idx]
19+
20+
if idx==maxIdx:
21+
idx=0
22+
23+
maxIdx-=1
24+
25+
return players[0]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution:
2+
def findTheWinner(self, n: int, k: int) -> int:
3+
if k==1:
4+
return n
5+
6+
players = [True for i in range(0,n)]
7+
roundCounter=0
8+
idx=-1
9+
10+
move = lambda i:i+1 if idx<n-1 else 0
11+
12+
while roundCounter<n-1:
13+
moveCounter=1
14+
idx= move(idx)
15+
16+
while not players[idx]:
17+
idx= move(idx)
18+
#print(f'1. {idx+1}')
19+
20+
while moveCounter<k:
21+
idx=move(idx)
22+
23+
if not players[idx]:
24+
while not players[idx]:
25+
idx=move(idx)
26+
#print(f'2. {idx+1}')
27+
moveCounter+=1
28+
29+
#print(f'3. {idx+1}')
30+
players[idx]=False
31+
roundCounter+=1
32+
33+
for i,player in enumerate(players):
34+
if player:
35+
return i+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* @param {string} s
3+
* @return {string}
4+
*/
5+
var reverseParentheses = function(s) {
6+
const stack = new Array()
7+
8+
let result="",c
9+
const startEndIdx=s.indexOf('(')
10+
const start= (startEndIdx>=0)?s.substring(0,startEndIdx ):""
11+
const endStartIdx=s.lastIndexOf(')')+1
12+
const end=(endStartIdx>=0)?s.substring(endStartIdx):""
13+
14+
for(let i=startEndIdx;i<endStartIdx;i++){
15+
c=s[i]
16+
17+
if(c!==')'){
18+
stack.push(c)
19+
continue
20+
}
21+
22+
c=stack.pop()
23+
result=""
24+
25+
while(c!=='(')
26+
{
27+
result+=c
28+
c=stack.pop()
29+
}
30+
31+
for(let i=0;i<result.length;i++)
32+
stack.push(result[i])
33+
}
34+
35+
result=stack.join('')
36+
37+
return start+result+end
38+
};
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function(n) {
6+
const map = new Map()
7+
let climb1,climb2
8+
9+
const climb=n=>{
10+
if(n<=2)
11+
return n
12+
13+
climb1=map.get(n-1)
14+
if(climb1===undefined){
15+
climb1=climb(n-1)
16+
map.set(n-1, climb1)
17+
}
18+
19+
climb2=map.get(n-2)
20+
if(climb2===undefined){
21+
climb2=climb(n-2)
22+
map.set(n-2, climb2)
23+
}
24+
25+
return climb1+climb2
26+
}
27+
28+
return climb(n)
29+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
var findSubarrays = function(nums) {
6+
for(let i=0;i<nums.length-2;i++)
7+
for(let j=i+1;j<nums.length-1;j++)
8+
if(nums[i]+nums[i+1]===nums[j]+nums[j+1])
9+
return true
10+
11+
return false
12+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @param {number[]} nums1
3+
* @param {number[]} nums2
4+
* @return {number}
5+
*/
6+
var findMedianSortedArray = function(nums){
7+
const mid= parseInt(nums.length/2)
8+
9+
if(nums.length%2===0)
10+
return (nums[mid-1]+nums[mid])/2
11+
return nums[mid]
12+
}
13+
14+
var findMedianSortedArrays = function(nums1, nums2) {
15+
const searchInsert=(val)=>{
16+
let low=0,high= nums1.length-1,mid, isUpper
17+
18+
while(high>=low)
19+
{
20+
mid= Math.floor((high+low)/2)
21+
22+
if(nums1[mid]===val)
23+
return mid
24+
25+
else if(nums1[mid]>val){
26+
high=mid-1
27+
isUpper=false
28+
}
29+
30+
else{
31+
low=mid+1
32+
isUpper=true
33+
}
34+
}
35+
36+
return isUpper?mid+1:mid
37+
}
38+
39+
if(nums1.length===0)
40+
return findMedianSortedArray(nums2)
41+
42+
for(let num of nums2)
43+
nums1.splice(searchInsert(num), 0, num)
44+
45+
return findMedianSortedArray(nums1)
46+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var minDays = function(n) {
6+
if(n<=0)
7+
return 0
8+
9+
const minDays=new Map()
10+
11+
const getMinDays=(n)=>{
12+
const nDays=[]
13+
14+
if(n<=2)
15+
return n
16+
17+
let min=minDays.get(n)
18+
if(min!==undefined)
19+
return min
20+
21+
const minDays2=1+n%2+getMinDays(parseInt(n/2))
22+
const minDays3=1+n%3+getMinDays(parseInt(n/3))
23+
24+
min= minDays2<minDays3?minDays2:minDays3
25+
minDays.set(n, min)
26+
27+
return min
28+
}
29+
30+
return getMinDays(n)
31+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var countNicePairs = function(nums) {
6+
let nList, mid
7+
8+
const getReverse=n=>{
9+
if(n<=9)
10+
return n
11+
12+
n=String(n)
13+
nList=new Array(n.length)
14+
15+
for(let i=n.length-1, j=0;j<i;i--,j++){
16+
nList[i]=n[j]
17+
nList[j]=n[i]
18+
}
19+
20+
if(n.length%2!==0){
21+
mid=parseInt(n.length/2)
22+
nList[mid]=n[mid]
23+
}
24+
25+
return parseInt(nList.join(''))
26+
}
27+
28+
const revNums=new Map(), revNumsFreq=new Map()
29+
let value,freq, counter=0
30+
31+
nums.forEach((num, i)=>{
32+
value=revNums.get(num)
33+
34+
if(value===undefined){
35+
value=num-getReverse(num)
36+
revNums.set(num, value)
37+
}
38+
39+
freq=revNumsFreq.get(value)
40+
41+
if(freq!==undefined)
42+
revNumsFreq.set(value,freq+1)
43+
else
44+
revNumsFreq.set(value,1)
45+
})
46+
47+
const revNumsFreqValues=Array.from(revNumsFreq.values())
48+
for(let i=0;i<revNumsFreqValues.length;i++){
49+
value=revNumsFreqValues[i]-1
50+
counter+=value*(value+1)/2
51+
}
52+
53+
return counter%(Math.pow(10,9)+7)
54+
};

0 commit comments

Comments
 (0)