javascript - Cari penyelesaian optimum untuk persilangan antara tempoh masa
PHP中文网
PHP中文网 2017-06-30 09:53:32
0
7
1190

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中文网

认证0级讲师

membalas semua(7)
世界只因有你

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

}
大家讲道理

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

我想大声告诉你

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

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

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

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

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 >

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan