• Leetcode刷题日记(2020.6.9):最小值


    题目如下:

    分析:

    本题说实话,没什么特殊的技巧,有的只是细节

    首先假如我们用暴力枚举两个数组中的所有数对,然后再计算绝对值最小的差值,肯定超时;那么我想了下,我们可以先分别对两个数组按照从小到大的顺序进行排序,然后再使用双指针的方法来计算

    算法流程:

    1.初始时,我们设置i=0,j=0分别指向两个数组中的第一个元素;

    2.然后我们计算a[i]-b[j]的绝对值,如果比当前的最小值还要小,就更新最小值;

    3.这里可以减少计算量,我们判断下a[i]和b[j]的大小关系:如果a[i]>b[j],那么如果我们增大i,差值只会越来越大,所以只能增大j;

    同理如果a[i]<b[j],那么就增大i

    4.最后如果其中一个数组遍历完了,就结束便利。

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 """
     4 # @Time : 2020/6/9 9:36 
     5 
     6 # @Author : ZFJ
     7 
     8 # @File : 最小差.py 
     9 
    10 # @Software: PyCharm
    11 """
    12 
    13 
    14 class Solution(object):
    15     def smallestDifference(self, a, b):
    16         """
    17         题解
    18         如果暴力枚举两个数组中的所有数对,然后计算绝对值最小的差值,这样显然是会超时的。
    19         所以我先分别对两个数组从小到大进行排序,然后用双指针的方法来计算。
    20 
    21         1.初始的时候 i=0,j=0 分别指向两个数组的第一个元素。
    22         2.然后计算 a[i]−b[j] 的绝对值,如果比当前最小值还要小,就更新最小值。
    23         3.然后判断 a[i]和 b[j]的大小关系。如果 a[i] > b[j],那么如果增大 i,差值只会越来越大,所以只能增大 j。
    24         同理如果 a[i] < b[j],那就增大 i。
    25         4.最后如果其中一个数组遍历完了就结束遍历。
    26         :type a: List[int]
    27         :type b: List[int]
    28         :rtype: int
    29         """
    30         # 首先对a,b进行排序
    31         a.sort()
    32         b.sort()
    33         n, m = len(a), len(b)
    34         i, j, res = 0, 0, 2147483647
    35         while i < n and j < m:
    36             # 使用变量保存最小值
    37             res = min(res, abs(a[i] - b[j]))
    38             # 如果当前a数组中的值,已经大于b数组中的值,我们只需要b数组继续遍历即可
    39             if a[i] > b[j]:
    40                 j += 1
    41             # 否则我们更新a数组中的值
    42             else:
    43                 i += 1
    44         return res
    45 
    46 
    47 A = Solution().smallestDifference(a=[1, 3, 15, 11, 2], b=[23, 127, 235, 19, 8])
    48 print(A)
  • 相关阅读:
    script中的event和for的意思
    jQuery选择器详解(一)转载自:http://blog.imbolo.com/jqueryselectors/#comments
    抽象类那点事(一步步案例分析,为什么需要它)
    关于application/xwwwformurlencoded等字符编码的解释说明 + 异步 True 或 False?+ onreadystatechange 事件
    SVG中中文字体的显示
    通过Virtualbox安装Ubuntu设置Emacs搭建Erlang环境
    试用Windows Live Writer
    Erlang中Eunit基本内容汇总
    xml特殊字符
    VS2010开发环境最佳字体及配色
  • 原文地址:https://www.cnblogs.com/ZFJ1094038955/p/13070957.html
Copyright © 2020-2023  润新知