美文网首页
记 被难到的第一个算法题

记 被难到的第一个算法题

作者: 葛木瓜 | 来源:发表于2019-05-25 02:01 被阅读0次

今日被问到一个所谓最简单的算法题,题目内容如下:

一个列表,数字连续,顺序无规律,从中剔除一个数,如何快速定位该数

最开始想到的方法是先排序,然后遍历列表,依次对前后元素做差,不等于1的元素+1,即为剔除的元素,于是具体实现为:

# method 2
def find_absence_2(lst):
    lst = sorted(lst)
    _len = len(lst) - 1
    for i in range(_len):
        if lst[i + 1] - lst[i] != 1:
            return lst[i] + 1

后来知道答案后恍然大悟,才知道原来如此简单,其实用列表未剔除的和,减去剔除后的和,即得到目标值,是不是很简单?

# method 1
def find_absence(lst):
    lst = sorted(lst)
    lst_end = lst[-1]
    normal_sum = 0
    for i in range(1, lst_end + 1):
        normal_sum += i
    absence_sum = 0
    for i in lst:
        absence_sum += i
    return normal_sum - absence_sum

但是,奇怪的是,从执行效率来看,遍历列表的方法居然比做差的方法更省时一点,具体如下:

  1. 计算时间实现
......
if __name__ == '__main__':

    upper = 10000000
    target = random.randint(1, upper - 1)
    lst = [n for n in range(1, upper) if n != target]
    start = time.time()
    print(find_absence(lst) == target)
    end = time.time()
    print('run method 1 spend time is ', (end - start))
    start = time.time()
    print(find_absence_2(lst) == target)
    end = time.time()
    print('run method 2 spend time is ', (end - start))
......
  1. 运行结果如下
李迪@freedomLiDi MINGW64 /f/learnPython (master)
$ python find_absence_num.py
True
run method 1 spend time is 1.453
True
run method 2 spend time is 1.391

李迪@freedomLiDi MINGW64 /f/learnPython (master)
$ python find_absence_num.py
True
run method 1 spend time is 1.453
True
run method 2 spend time is 0.953

OK!

~
~
~


不积跬步,无以至千里

相关文章

  • 记 被难到的第一个算法题

    今日被问到一个所谓最简单的算法题,题目内容如下: 一个列表,数字连续,顺序无规律,从中剔除一个数,如何快速定位该数...

  • Freecodecamp算法

    今天做到了 Freecodecamp上面的第一个算法题,虽然很基础,但还是记一下自己用的知识每一道算法题都跟你罗列...

  • Best Time to Buy and Sell Stock

    tags: 算法, LeetCode, swift, 动态规划 这是最近在学算法中完成的第一个系列题,系列题...

  • 二项式分布算法(Java实现)

    二项式分布算法(Java实现) 最近开始看《算法(第四版)》,这是遇到的第一个算法题。题目要求的只是估计一下算法递...

  • Android面经| 算法题解

    整理了校招面试算法题,部分《剑指offer》算法题,以及LeetCode算法题,本博文中算法题均使用Java实现校...

  • 一周ARTS(11-08)

    Algorithm 学习了回溯算法。 Tips 练习编程题,先想清楚,再开始写代码。 Review 这篇文章讲了记...

  • 面试题高频算法题整理

    以下算法题几乎都是简单题,都为面试算法题值得刷的题,需要理解并记住解题思路,而其中★标注的题,更是面试算法题中的高...

  • 记字节前端面试一道简单的算法题

    记字节前端面试一道简单的算法题 70. 爬楼梯[https://leetcode-cn.com/problems/...

  • LeetCode从零刷起 (4. Median of Two S

    这道题是我刷leetcode遇到的第一个难度为Hard的题,笔者在大学学习算法课的时候接触过类似的题目,不过由于时...

  • 回溯,贪心,动态规划

    1.回溯算法思想leetcode 112 号算法题:路径总和leetcode 113 号算法题:路径总和 IIle...

网友评论

      本文标题:记 被难到的第一个算法题

      本文链接:https://www.haomeiwen.com/subject/dtgozqtx.html