给定一整数在有序的整数数组中找出与给定值最接近的k个整数
来源:互联网 发布:yoga lenovo 知乎 编辑:程序博客网 时间:2024/05/16 12:06
思路:首先找出给定值在给定数组中的插入位置(不是真的将给定值插入给定数组),然后以此位置为基准,向左或向右依次找出最接近的k个整数。
难点:个人在处理过程中的难点在于向左或向右移动过程中的确切位置的确定。
代码:
<pre class="cpp" name="code"><span style="font-size:14px;"><span style="color:#ff0000;">//找出value在数组中的应该插入位置</span>int kPosition(int A[], int nLength,int value){int pos = 0;int i = 0;for (; i < nLength; ++i){if (A[i]>value){pos = i;break;}}if (i == nLength){return nLength-1;}else{return pos;}}</span>
<span style="color:#ff0000;">//记录k个值</span>vector<int> kNumber(int A[], int nLength, int pos,int value,int k){vector<int>result;if (pos == 0){result.assign(A, A + k);//将数组中的元素复制到vector中return result;}if (pos == nLength - 1){result.assign(A + nLength - k, A + nLength);return result;}int posMid = abs(A[pos-1] - value) >= abs(A[pos] - value) ? pos : pos-1;//首先找到绝对差值 //最小位置int posFront = posMid;//将刚开始的前位置同时指向绝对差值最小位置int posBehind = posMid;//将刚开始的后位置同时指向绝对差值最小位置 int posNextFront = posMid-1;//下一个前位置 int posNextBehind =posMid+1;//下一个后位置while (posBehind - posFront < k-1){if (abs(A[posNextFront]-value) >= abs(A[posNextBehind]-value)){posBehind = posNextBehind;if (posNextBehind < nLength - 1){++posNextBehind;}else{posFront = posNextFront;//已到结尾,必须前向增加--posNextFront;}}else{posFront = posNextFront;if (posNextFront > 0){--posNextFront;}else{posBehind = posNextBehind;//已到头,必须后向增加++posNextBehind;}}} result.assign(A + posFront, A + posBehind+1);return result;}
0 0
- 给定一整数在有序的整数数组中找出与给定值最接近的k个整数
- 346/5000 给定一个n个整数的数组S,在S中找到三个整数,使得总和最接近给定数量的目标。 返回三个整数的和。
- 给定K个整数,找出由这K个整数组成的最小的数字
- 给定一个整数sum, 从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum
- leetcode-java.T016_threeSumClosest---给定包含n个整数数组S,找到S中的三个整数,从而使之和最接近给定的数,返回三个整数的总和.
- 给定一个无序整型数组,找出数组中未出现的最小整数
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(1)
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)
- 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
- 在给定整数序列中,找出最大和的子序列...
- 给定一个整数序列,请找出这个整数序列的中间数的值。
- 新浪微博 陈利人 面试题 给定k个数组,每个数组有k个整数。每个数组中选取一个整数,一共k个整数,取其和,一共可以得到k^k个和。给出方法,求得这k^k个和中,最小的k个。
- 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。
- 在排序数组中找给定数字出现的次数和任意整数有几种分解方法
- 给定包含4300000000个32位整数的顺序文件,如何找出一个出现至少两次的整数
- 给定一个n个整数的数组S,是否存在S中的4个数,使得a + b + c + d = target。 在数组中找出所有唯一的四元组,给出目标的总和。
- 如何在一堆正整数中(数组arr)找出与给定正整数(num)最接近的那个数(result)
- PHPUnit单元测试对桩件(stub)和仿件对象(Mock)的理解
- qt下OpenGL项目的创建
- LeetCode:381 Insert Delete GetRandom O(1)
- HDU 5822 color[Waiting]
- yii2项目实战-博客管理平台的搭建
- 给定一整数在有序的整数数组中找出与给定值最接近的k个整数
- java面试准备-day03-并发包类
- 安卓的通信机制
- POJ 2142 The Balance .
- RDD与DataFrame
- 转:虚幻4引擎3d化UI教程
- 排序检索-10474 - Where is the Marble?
- 让Dev C++支持C++11
- 2092 整数解