Maison > Questions et réponses > le corps du texte
Déterminez s'il existe une intersection entre une période de temps et un groupe de périodes de temps. Si les heures de début et de fin sont les mêmes, on estime qu'il y a une intersection
telle que
判断
12:30:00--14:20:00
与下列时间段是否有交集
10:00:00-12:00:00, 12:10:00-12:50:00 , 14:30:00-15:00:00
Convertissez en horodatage, puis comparez-les un par un dans une boucle
function is_cross($st1, $et1, $st2, $et2)
{
$status = $st2 - $st1;
if ($status > 0) {
$status2 = $st2 - $et1;
if ($status2 >= 0) {
return false;
} else {
return true;
}
} else {
$status2 = $et2 - $st1;
if ($status2 > 0) {
return true;
} else {
return false;
}
}
}
Cela peut résoudre le problème, mais nous recherchons une meilleure méthode avec la plus petite complexité temporelle
世界只因有你2017-06-30 09:55:32
fonction publique inter(){
$tar=[6,4];
if($tar[0]>$tar[1]){
$temp=$tar[0];
$tar[0]=$tar[1];
$tar[1]=$temp;
}
$all=[
[5,6],
[7,9],
[1,4],
[3,1],
[1,3],
[8,7]
];
//排序
foreach ($all as &$v){
if($v[0]>$v[1]){
$temp=$v[0];
$v[0]=$v[1];
$v[1]=$temp;
}
}
foreach ($all as $k=>$v){
$left=$tar[0]>$v[1];
$right=$v[0]>$tar[1];
if(!($left||$right)){
var_dump($v);
}
}
}
我想大声告诉你2017-06-30 09:55:32
Si ceci 一堆一段时间
doit être utilisé plusieurs fois : vous pouvez utiliser un arbre de segments de ligne. La « comparaison individuelle » ne sera pas plus lente lorsqu'elle est utilisée une seule fois.
迷茫2017-06-30 09:55:32
# -*- coding: utf-8 -*-
def is_mixed(t1, t2):
'''
假定时间段格式是:"10:00:00-12:00:00"
判断 t1,t2是否有交集
'''
s1, e1 = t1.split("-")
s2, e2 = t2.split("-")
if s1 > e2 and s2 > e1:
return True
if s2 > e1 and s1 > e2:
return True
return False
t1 = "12:30:00-04:20:00"
t2 = "03:00:00-22:23:00"
if is_mixed(t1, t2):
print "有交集!"
else:
print "木有交集!"
Version Python, js devrait être le même
怪我咯2017-06-30 09:55:32
De cette façon, vous pouvez sélectionner la période qui chevauche la période parmi les périodes.
period = "12:30:00-14:20:00"
periods = ["10:00:00-12:00:00", "12:10:00-12:50:00","14:30:00-15:00:00"]
print([x+'-'+y for [b,e] in [period.split("-")] for [x,y] in [p.split("-") for p in periods] if x<=e and y>=b])
漂亮男人2017-06-30 09:55:32
Convertissez le temps en un entier 123000, et jugez à l'envers
a -- b
c -- d
Dans quelles circonstances ces deux périodes de temps ne se chevauchent-elles pas ?