javascript - algoritma kecil python
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-15 09:21:43
0
3
1147

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? ?

曾经蜡笔没有小新
曾经蜡笔没有小新

membalas semua(3)
typecho

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.

漂亮男人

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)
伊谢尔伦

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!