recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Trouver la solution optimale pour l'intersection des périodes

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中文网2740 Il y a quelques jours1240

répondre à tous(7)je répondrai

  • 世界只因有你

    世界只因有你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);
            }
        }
    
    }

    répondre
    0
  • 大家讲道理

    大家讲道理2017-06-30 09:55:32

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

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你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.

    répondre
    0
  • 迷茫

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

    répondre
    0
  • ringa_lee

    ringa_lee2017-06-30 09:55:32

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

    répondre
    0
  • 怪我咯

    怪我咯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])

    répondre
    0
  • 漂亮男人

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

    1. b<c

    2. a>d

    3. répondre
      0
  • Annulerrépondre