首页 > 解决方案 > 最大的小日期

问题描述

我有两个日期列,假设 A 和 B 在两个单独的表中。A 包含测试日期的信息,B 列包含工厂校准的日期。我想提取自上次校准工厂以来已经过去了多少天的信息。

例如:

A=['2020-02-26', '2020-02-27', '2020-02-28', '2020-02-29']

B=['2020-02-24', '2020-02-28']

Days_Passed自上次校准以来对应A[2,3,0,1]

标签: pythonarrayspandasalgorithmbinary-search

解决方案


如果 date in Aand Bbe in order,这可以在O(n+m)wherenmare the length of Aand中完成B。尽管您没有提到编程语言,但这是 C# 中的实现

主要部分:

foreach (var testedDate in testedDates)
{
    if (nextCalibratedDate.HasValue && (testedDate - nextCalibratedDate.Value).Days >= 0)
    {
        Console.WriteLine((testedDate - nextCalibratedDate.Value).Days);
        calibratedDate = nextCalibratedDate.Value;
        if (enumerator.MoveNext())
        {
            nextCalibratedDate = (DateTime?)enumerator.Current;
        }
    }
    else
    {
        Console.WriteLine((testedDate - calibratedDate).Days);
    }
}

这是完整的代码:

public static void Main(string[] args)
{
    string[] A = new[] { "2020-02-26", "2020-02-27", "2020-02-28", "2020-02-29" };
    string[] B = new[] { "2020-02-24", "2020-02-28" };

    var testedDates = A
        .Select(x => DateTime.Parse(x))
        .ToArray();
    var calibratedDates = B
        .Select(x => DateTime.Parse(x))
        .ToArray();

    var enumerator = calibratedDates.GetEnumerator();
    enumerator.MoveNext();
    var calibratedDate = (DateTime)enumerator.Current;
    DateTime? nextCalibratedDate = default;
    if (enumerator.MoveNext())
    {
        nextCalibratedDate = (DateTime?)enumerator.Current;
    }

    foreach (var testedDate in testedDates)
    {
        if (nextCalibratedDate.HasValue && (testedDate - nextCalibratedDate.Value).Days >= 0)
        {
            Console.WriteLine((testedDate - nextCalibratedDate.Value).Days);
            calibratedDate = nextCalibratedDate.Value;
            if (enumerator.MoveNext())
            {
                nextCalibratedDate = (DateTime?)enumerator.Current;
            }
        }
        else
        {
            Console.WriteLine((testedDate - calibratedDate).Days);
        }
    }
}

推荐阅读