cari

Rumah  >  Soal Jawab  >  teks badan

javascript - algoritma kecil python

Terdapat senarai rentetan tarikh, seperti berikut:


lst = ['2017-06-01', '2017-06-08', '2017-06-15', '2017-06-22', '2017-06-29', ...]

Cari rentetan tarikh dalam s = ['2017-06-09']lst yang paling serupa

IDEA 1: Tukar nilai S dan LST ke dalam tarikh, melintasi dan membandingkan perbezaan dalam beberapa saat, dan yang terkecil adalah rentetan tarikh yang anda cari.

Adakah cara yang lebih baik untuk mencapai matlamat ini? ?

曾经蜡笔没有小新曾经蜡笔没有小新2751 hari yang lalu1169

membalas semua(3)saya akan balas

  • typecho

    typecho2017-06-15 09:23:43

    Saya akan memberi anda idea untuk rujukan anda
    lst.append(s)
    lst.sort()
    num=lst.index(s)
    Kemudian bandingkan lst[num-1] dan lst[num+1] Semakin kecil perbezaan bilangan saat adalah hasilnya, jadi tidak perlu merentasi dan mengira cap waktu.
    Jika anda rasa ia bagus, sila berikan kepada Zanga dan pakai.

    balas
    0
  • 漂亮男人

    漂亮男人2017-06-15 09:23:43

    Tolak tarikh dengan mengalih keluar tarikh dalam -转换为整数, 再分别与s, dan nombor dengan nilai mutlak terkecil ialah tarikh terdekat.

    
    # Python code
    lst = ['2017-06-01', '2017-06-08', '2017-06-15', '2017-06-22', '2017-06-29']
    s = ['2017-06-09']
    date = [''.join(x.split('-')) for x in lst]
    datetoint = [int(x) for x in date]
    gaps = [abs(x - int(''.join(s[0].split('-')))) for x in datetoint]
    mostrecentdate = lst[gaps.index(min(gaps))]
    print(mostrecentdate)

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-15 09:23:43

    Saya merasakan bahawa lz bermaksud untuk tidak melintasi lst Sama ada ia adalah isihan atau penolakan, traversal sebenarnya berlaku
    Saya harus menggunakan kaedah dikotomi ini mungkin maksudnya

    i = 0
    j = len(list)
    while True:
        index = (i + j) / 2
        if s > lst[index]:
            i = index
        else:
            j = index
        continue

    Baca sahaja sebagai kod pseudo, itulah maksudnya, dengan cara ini bilangan traversal adalah paling sedikit.

    balas
    0
  • Batalbalas