javascript - Trouver la solution optimale pour l'intersection des périodes
PHP中文网
PHP中文网 2017-06-30 09:53:32
0
7
1194

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

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(7)
世界只因有你

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);
        }
    }

}
大家讲道理

Convertissez l'heure en horodatage, puis ------- comparez.

我想大声告诉你

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.

迷茫
# -*- 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

ringa_lee
转换成时间戳能方便比较点
刘奇

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])
漂亮男人

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 ?

  1. b<c

  2. a>d

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal