萌新的我遇到了一道算法, 苦手求大佬

2019-02-19 15:16:11 +08:00
 awesomelei

需要将借款与还款作配对, 借款与还款是是多对多关系, 通俗说明:借款与还款先后进行匹配, 多余部分匹配到对应的下一笔上,示例 loan = [5000, 4000, 1000]; repay = [2000, 4000,3000]; 则输出

relation = [{
    loanId: 0,
    loanAmount: 5000,
    repay: [{
    	repayId: 0,
        repayAmount:2000
    }, {
    	repayId: 1,
        repayAmount:3000
    }]
}, {
    loanId:1,
    loanAmount:4000,
    repay: [{
    	repayId:1,
        repayAmount: 1000
    }, {
    	repayId:2,
        repayAmount:3000
    }]
}, {
    loanId:2,
    loanAmount:1000,
    repay:[]
}]
3222 次点击
所在节点    程序员
31 条回复
abeholder
2019-02-19 16:39:00 +08:00
@awesomelei 你这个用例最后结果 - 3000 难道不对吗?
awesomelei
2019-02-19 16:41:11 +08:00
以这个为例子
```
const loan = [5000, 4000, 1000];
const repay = [6000];
```
看下输出, 有些 loan 对应的可能还是 NaN 的类型
@abeholder
awesomelei
2019-02-19 16:41:58 +08:00
@abeholder 当我举措例子, 以 const repay = [6000]为准= =抱歉
awesomelei
2019-02-19 16:45:42 +08:00
@abeholder 不合题意的在于 第一笔 repay 如果大于第一笔 loan, 可能出现将负数 loan 添加进去, 这边还有个隐藏要求是,不显示负数, 到最后一轮循环匹配不上的数目就结束= =
abeholder
2019-02-19 16:47:59 +08:00
@awesomelei 所以 [6000] 这个用例的输出结果是?
awesomelei
2019-02-19 16:52:54 +08:00
@abeholder
relation = [{
loanId: 0,
loanAmount: 5000,
repay: [{
repayId: 0,
repayAmount:5000
}
}, {
loanId:1,
loanAmount:4000,
repay: [{
repayId:0,
repayAmount: 1000
}]
}, {
loanID:2,
loanAmount:1000,
repay:[]
}]
awesomelei
2019-02-19 16:56:05 +08:00
@abeholder
```
relation = [{
loanId: 0,
loanAmount: 5000,
repay: [{
repayId: 0,
repayAmount:5000
}]
}, {
loanId:1,
loanAmount:4000,
repay: [{
repayId:0,
repayAmount: 1000
}]
}, {
loanId:2,
loanAmount:1000,
repay:[]
}]
```
abeholder
2019-02-19 16:58:50 +08:00
@awesomelei 好麻烦啊,不会 = =
awesomelei
2019-02-19 17:08:21 +08:00
@dark3212 对了, 但这样好像没有差额的概念了, 这里还可能需要把一笔还款拆分成多笔, 加入到 loan 中,需要具体的金额
dark3212
2019-02-19 17:42:28 +08:00
变换下思路就行啊,
思路给你了,多 debug 啥都就有了。
假设 借款总额变量是 loanSum,还款总额变量是 repaySum。

当前循环借款更大的情况
nextRepay = 取下一个还款
if(loanSum>repaySum+nextRepay)
差额 = nextRepay
else
差额= loanSum - repaySum
repaySum += nextRepay
继续循环

还款更大的情况
nextLoan = 取下一个借款
if(loanSum + nextLoan >repaySum)
差额 =repaySum - loanSum
else
差额= nextLoan
loanSum += nextLoan
继续循环
injy
2019-02-19 23:22:24 +08:00
是不是可以直接按照题意:
tmpNum=repay1

if(loan1>tmpNum)
arr1[]=tmpNum
tmpNum+=repay2
else
arr1=loan1-(tmpNum-repay1)
tmpNum-=loan1

return arr1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/536565

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX