Rumah  >  Soal Jawab  >  teks badan

javascript - Cari penyelesaian optimum untuk persilangan antara tempoh masa

Tentukan sama ada terdapat persimpangan antara tempoh masa dan sekumpulan tempoh masa. Jika masa mula dan tamat adalah sama, ia dinilai bahawa terdapat persimpangan
seperti

判断 
12:30:00--14:20:00
与下列时间段是否有交集
10:00:00-12:00:00,  12:10:00-12:50:00 , 14:30:00-15:00:00

Tukar kepada cap masa dan kemudian bandingkan satu demi satu dalam satu gelung

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

Ini boleh menyelesaikan masalah, tetapi kami sedang mencari kaedah yang lebih baik dengan kerumitan masa terkecil

PHP中文网PHP中文网2667 hari yang lalu1152

membalas semua(7)saya akan balas

  • 世界只因有你

    世界只因有你2017-06-30 09:55:32

    fungsi awam antara(){

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

    balas
    0
  • 大家讲道理

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

    Tukar masa kepada cap masa, dan kemudian ------- bandingkan.

    balas
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-30 09:55:32

    Jika ini 一堆一段时间 perlu digunakan beberapa kali: anda boleh menggunakan pokok segmen garisan. "Perbandingan satu dengan satu" tidak akan menjadi lebih perlahan apabila digunakan sekali.

    balas
    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 "木有交集!"
    

    Versi Python, js sepatutnya sama

    balas
    0
  • ringa_lee

    ringa_lee2017-06-30 09:55:32

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

    balas
    0
  • 怪我咯

    怪我咯2017-06-30 09:55:32

    Dengan cara ini, anda boleh memilih tempoh masa yang bertindih dengan tempoh dari tempoh.

    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])

    balas
    0
  • 漂亮男人

    漂亮男人2017-06-30 09:55:32

    Tukar masa kepada integer 123000, dan nilai secara terbalik
    a -- b
    c -- d
    Dalam keadaan apakah kedua-dua tempoh masa ini tidak bertindih?

    1. b < c

    2. a >

      balas
      0
  • Batalbalas