zoukankan      html  css  js  c++  java
  • leetcode719:直线上的第k近点对

    问题描述

    给定数组a[N],可以确定C(N,2)个点对,也就确定了C(N,2)个距离,求这些距离中第k小的距离(k<C(N,2))。

    思路

    看到第k小、第k大这种问题,首先想到二分法。
    把求值问题转化为:小于这个值的元素有多少个。

    这道题的区间问题需要仔细考虑清楚,在所有出现小于号的地方考虑是否需要带等号。

    代码

    class Solution:
        def smallestDistancePair(self, nums, k):
            """
            :type nums: List[int]
            :type k: int
            :rtype: int
            """
            nums = sorted(nums)
            l = 0
            r = nums[-1] - nums[0]
    
            def find(m):
                s = 0
                j = 0
                for i in range(len(nums)):
                    while j < len(nums) and nums[j] - nums[i] <= m:
                        j += 1
                    s += j - i - 1
                return s
    
            while l< r:
                m = (l + r) // 2
                s = find(m)
                if s >= k:
                    r = m
                else:
                    l = m+1
            return l
    
  • 相关阅读:
    form表单提交json格式数据
    docker搭建jenkins
    consul搭建服务注册和
    docker创建mysql镜像
    Swagger入门
    net coer log4+ELK搭建
    log4配置
    netcore autofac依赖注入
    netcore 跨域
    netcore 读取配置文件
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/7750653.html
Copyright © 2011-2022 走看看