leetcode 658找到k个最接近的元素

class Solution {
public:
    vector<int> findClosestElements(vector<int>& arr, int k, int x) {
        //查找,二分法找到那个数的lowerbound然后左右指针比较;O(logn+2k)
        vector<int>::iterator p=lower_bound(arr.begin(),arr.end(),x);
        if(p!=arr.begin() && *p != x) p--;
        vector<int> res;
        int len=arr.size();
        int l=p-arr.begin(),r=p-arr.begin();
        //cout<<l<<","<<r<<endl;
        while(r-l<k-1){
            if(l==0){
                r++;continue;
            }
            if(r==len-1){
                l--;continue;
            }
            if(arr[r+1]-x>=x-arr[l-1])
                l--;
            else
                r++;
        }
        for(int i=l;i<=r;i++)
            res.push_back(arr[i]);
        return res;
    }
};

原文地址:https://www.cnblogs.com/joelwang/p/10997003.html

时间: 2024-07-29 23:00:39

leetcode 658找到k个最接近的元素的相关文章

Leetcode 658.找到K个最接近的元素

找到k个最接近的元素 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先选择数值较小的那个数. 示例 1: 输入: [1,2,3,4,5], k=4, x=3 输出: [1,2,3,4] 示例 2: 输入: [1,2,3,4,5], k=4, x=-1 输出: [1,2,3,4] 说明: k 的值为正数,且总是小于给定排序数组的长度. 数组不为空,且长度不超过 104 数组里的每个元

(双指针、二分Binary Search) leetcode 658. Find K closest Elements

题意:给定一个升序排列的数组,找到k个与x最相近的元素(即差值最小),返回的结果必须要是按升序排好的.如果有两个数与 x的差值一样,优先选择数值较小的那个数. 解法一:双指针(排除法),一个一个删,因为是有序数组,且返回的是连续升序子数组,所以每一次删除的元素一定是位于边界:如果数组含有共 7 个元素,要保留 3 个元素,因此要删除 4 个元素(arr.size()-k):因为要删除的元素都位于边界,于是可以使用双指针(左指针指向数组的第一个元素,右指针指向数组最后一个元素)对撞的方式确定保留区

leetcode 658. Find K Closest Elements

Given a sorted array, two integers k and x, find the k closest elements to x in the array. The result should also be sorted in ascending order. If there is a tie, the smaller elements are always preferred. Example 1: Input: [1,2,3,4,5], k=4, x=3 Outp

[LeetCode 题解]: Merge k Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 题意:对k个有序的链表进行归并排序.并分析其复杂度. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(N

[LeetCode] 023. Merge k Sorted Lists (Hard) (C++/Python)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 023. Merge k Sorted Lists (Hard) 链接: 题目:https://oj.leetcode.com/problems/merge-k-sorted-lists/ 代码(github):https://github.com/illuz/leetcode 题意: 和 021. Merge T

Bailian4134 查找最接近的元素【二分查找】

4134:查找最接近的元素 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个非降序列中,查找与给定值最接近的元素. 输入 第一行包含一个整数n,为非降序列长度.1 <= n <= 100000. 第二行包含n个整数,为非降序列各元素.所有元素的大小均在0-1,000,000,000之间. 第三行包含一个整数m,为要询问的给定值个数.1 <= m <= 10000. 接下来m行,每行一个整数,为要询问最接近元素的给定值.所有给定值的大小均在0-1,000,000,

[ jquery 过滤器 parents(expr) ] 此方法用于在选择器的基础之上搜索被选元素沿着父元素链找到符合参数的那个父元素,完成需求,如果没有参数,他会一直沿着父元素链解析到 html 标签

取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素 "!DOCTYPE html").可以通过一个可选的表达式进行筛选 实例: <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords

01:查找最接近的元素

http://noi.openjudge.cn/ch0111/01/ 01:查找最接近的元素 总时间限制:  1000ms 内存限制:  65536kB 描述 在一个非降序列中,查找与给定值最接近的元素. 输入 第一行包含一个整数n,为非降序列长度.1 <= n <= 100000.第二行包含n个整数,为非降序列各元素.所有元素的大小均在0-1,000,000,000之间.第三行包含一个整数m,为要询问的给定值个数.1 <= m <= 10000.接下来m行,每行一个整数,为要询问

[LeetCode]23. Merge k Sorted Lists

23. Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 给定k个排序了的链表,合并k个链表成一个排序链表. 本程序思路: 1)首先得到K个链表的长度和存在len中 2)从K个链表中找到值最小的那个节点,把该节点添加到合并链表中 3)重复len次即可把所有节点添加到合并链表中. 注意事项: 1)K个链表中有的