给出若干组持仓开始时间 ,持仓结束时间,求持仓总时间 多段时间可能有交集 java代码怎么写
时间: 2023-11-14 16:16:27 浏览: 60
我们可以定义一个类表示每个持仓段,包含开始时间和结束时间。然后对所有持仓段进行排序,按照开始时间从小到大排序。接着遍历所有持仓段,如果当前持仓段的开始时间在上一个持仓段结束时间之后,则将当前持仓段的时间累加到总时间中,否则说明有交集,将当前持仓段的结束时间更新为上一个持仓段结束时间,然后将累加到总时间中。
以下是Java代码实现:
```
import java.util.Arrays;
public class HoldingTime {
static class Holding {
int startTime;
int endTime;
public Holding(int startTime, int endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
}
public static int getTotalHoldingTime(Holding[] holdings) {
// 对持仓段按照开始时间排序
Arrays.sort(holdings, (a, b) -> a.startTime - b.startTime);
int totalHoldingTime = 0;
int prevEndTime = 0;
for (Holding holding : holdings) {
if (holding.startTime > prevEndTime) {
// 当前持仓段开始时间在上一个持仓段结束时间之后,累加当前持仓段时间
totalHoldingTime += holding.endTime - holding.startTime;
} else {
// 当前持仓段与上一个持仓段有交集,更新当前持仓段结束时间
totalHoldingTime += holding.endTime - prevEndTime;
holding.endTime = prevEndTime;
}
prevEndTime = holding.endTime;
}
return totalHoldingTime;
}
public static void main(String[] args) {
Holding[] holdings = {
new Holding(1, 5),
new Holding(4, 8),
new Holding(10, 15),
new Holding(12, 18)
};
int totalHoldingTime = getTotalHoldingTime(holdings);
System.out.println("Total holding time: " + totalHoldingTime);
}
}
```
阅读全文