var findTargetSumWays = function(nums, target) {
let sum=nums.reduce((a,b)=>a+b)
if(sum<target)return 0
if((sum-target)%2===1)return 0
let dp=new Array(nums.length+1).fill(0).map(()=>new Array((sum-target)/2+1).fill(0))
dp[0][0]=1
for(let i=1;i<=nums.length;i++){
const num=nums[i-1]
for(let j=0;j<=(sum-target)/2;j++){
dp[i][j]=dp[i-1][j]
if(j>=num){
dp[i][j]+=dp[i-1][j-num]
}
}
}
return dp[nums.length][(sum-target)/2]
};
var maxSubArray = function(nums) {
let res=-Infinity
let sum=0
for(let i of nums){
sum+=i
if(sum>res){
res=sum
}
if(sum<0){
sum=0
}
}
return res
};
const timePoints = ["23:59","00:00","02:56","23:14"]
var findMinDifference = function(timePoints) {
timePoints.sort()
let res=Math.min((getMinite(timePoints[timePoints.length-1])-getMinite(timePoints[0])),(getMinite(timePoints[0])+1440-getMinite(timePoints[timePoints.length-1])))
for(let i=0;i<timePoints.length-1;i++){
res=Math.min(res,getMinite(timePoints[i+1])-getMinite(timePoints[i]))
}
return res
};
const getMinite=(s)=>{
let times=s.split(':').map(i=>i*1)
return times[0]*60+times[1]
}
var evalRPN = function(tokens) {
const stack=[]
const methods=["+","-","*","/"]
for(let i of tokens){
if(!methods.includes(i)){
stack.push(i*1)
}else{
nums1=stack.pop()
nums2=stack.pop()
if(i==="+"){
stack.push(nums1+nums2)
}else if(i==='-'){
stack.push(nums2-nums1)
}
else if(i==='*'){
stack.push(nums2*nums1)
}else if(i==='/'){
stack.push((nums2/nums1)>0?Math.floor(nums2/nums1):Math.ceil(nums2/nums1))
}
}
}
return stack.pop()
};