给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数。
返回的结果必须要是按升序排好的。
如果有两个数与 x 的差值一样,优先选择数值较小的那个数。
第一行为排序好的数组arr
第二行为查找的个数k
第三行为基准值x
按升序排好的的数组
1,2,3,4,5 4 3
1,2,3,4
k 的值为正数,且总是小于给定排序数组的长度数组不为空,且长度不超过 104数组里的每个元素与 x 的绝对值不超过 104
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
void dealStr(vector<int>& v, string s)
{
int t=0;
for(auto c:s)
{
if(c!=',')
{
t=t*10+c-'0';
}
else
{
v.push_back(t);
t=0;
}
}
v.push_back(t);
}
int main()
{
vector<int> v;
int m=0,n=0,k=0,l,r;
string s1="";
cin>>s1;
cin>>k;
cin>>n;
dealStr(v, s1);
m=v.size();
auto it = lower_bound(v.begin(), v.end()-1, n);
l = it - v.begin();
if(l>=m)
l--;
r=l;
while(r-l+1<k)
{
if(l==0)
r++;
else
if(r==m-1)
{
l--;
}
else
{
if(v[r+1]-k<v[l-1]-k)
r++;
else
l--;
}
}
cout<<v[l];
for(int i=l+1;i<=r;i++)
{
cout<<',';
cout<<v[i];
}
cout<<endl;
return 0;
} s=list(map(int,input().split(",")))
ls=[]
k=int(input())
x=int(input())
for i in range(len(s)):
ls.append((i,s[i]-x))
ls.sort(key=lambda x:x[1])
for i in range(k-1):
print(s[i],end=",")
print(s[k-1]) #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define IOS ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define pb push_back
#define all(x) (x).begin(),(x).end()
int a,x,k;
vector<int> v,ans;
int main()
{
while(1)
{
cin>>a;
v.pb(a);
if(getchar()!=',') break;
}
cin>>k>>x;
vector<pair<int,int>> num;
for(int i:v)
num.pb({abs(i-x),i});
sort(all(num));
for(int i=0;i<k;i++) ans.pb(num[i].second);
sort(all(ans));
for(int i=0;i<ans.size();i++)
{
if(i) cout<<',';
cout<<ans[i];
}
}
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
int a,b,c;
int num = 0;
int i = 0;
vector<int> vec1;
vector<int> vec2;
while(cin>>a)
{
vec1.push_back(a);
if(cin.get() == '\n')//取出逗号,并判断当前是否到末尾
break;
}
cin>>b;
cin>>c;
while(1)
{
for(auto it = vec1.begin(); it != vec1.end(); it++)
{
if(abs(*it - c) == i)
{
if(num < b)
{
vec2.push_back(*it);
num ++;
}
else
break;
}
}
if(num < b)
{
i++;
}
else
{
break;
}
}
for(int i =1;i<= vec2.size()-1;i++)
{
for(int j = 1;j<= vec2.size()-i;j++)
{
if(vec2[j]<vec2[j-1])
{
int temp = vec2[j];
vec2[j] = vec2[j-1];
vec2[j-1] = temp;
}
}
}
for(auto it = vec2.begin(); it != vec2.end();it++)
{
if (it == vec2.end()-1)
{
cout << *it;
}
else
{
cout << *it << ",";
}
}
} arr = map(int, raw_input().strip().split(','))
k = input()
x = input()
delta = [abs(item-x) for item in arr]
# find the minmum #
midx = 0
for i in range(1, len(arr)):
if delta[i] < delta[midx]:
midx = i
else:
break
if k == 1:
print('%d'%arr[midx])
else:
# find top k #
l = midx - 1
r = midx + 1
lr = []
rr = []
k -= 1
while k > 0:
if l > -1 and r < len(arr):
if delta[l] <= delta[r]:
lr.append(arr[l])
l -= 1
else:
rr.append(arr[r])
r += 1
elif l < 0 and r < len(arr):
rr.append(arr[r])
r += 1
elif l > -1 and r >= len(arr):
lr.append(arr[l])
l -= 1
k -= 1
res = lr[::-1] + [arr[midx]] + rr
s = ''
for i in res:
s += ('%d,'%i)
print(s[:-1]) let arr = readline().split(',')
let k = parseInt(readline())
let x = parseInt(readline())
while(arr.length>k) {
let start = Math.abs(arr[0]-x)
let end = Math.abs(arr[arr.length-1]-x)
if (start>end) {
arr.splice(0,1)
} else {
arr.splice(arr.length-1,1)
}
}
console.log(arr); import bisect
a=list(map(int,input().split(',')))
n=len(a)
k=int(input())
x=int(input())
p=bisect.bisect_left(a, x)
l=p
r=p
ans=[]
if l==0 :
while l<0 :
l=l+1
r=l
ans.append(a[r])
if r>0 :
while r>n-1 :
r=r-1
l=r
ans.append(a[l])
#print(ans)
while r-l+1<k :
if l-1>=0 and r+1<=n-1:
if x-a[l-1]<=a[r+1]-x :
l=l-1
ans.insert(0,a[l])
else :
r=r+1
ans.append(a[r])
elif l==0 :
r=r+1
ans.append(a[r])
elif r==n-1 :
l=l-1
ans.insert(0,a[l])
#print(ans)
ans_str=''
ans_str=','.join(map(str,ans))
print(ans_str)
if(line=readline()){
var lines = line.split(',');
var arrlength=lines.length;
var arr=new Array(arrlength);
for(var arrnum=0;arrnum<arrlength;arrnum++){
arr[arrnum]= parseInt(lines[arrnum]);
}
}
//console.log(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]+","+arr[4]);
let k=4;
if(line=readline()){
var lines = line.split(' ');
var i = parseInt(lines[0]);
k=i;
}
let x=3;
if(line=readline()){
var lines = line.split(' ');
var i = parseInt(lines[0]);
x=i;
}
let minCost=Math.abs(x-arr[0]);
let minCostIndex=0;
for(let i=0;i<arr.length;i++){
if(minCost>Math.abs(x-arr[i])){
minCost=Math.abs(x-arr[i]);
minCostIndex=i;
}
if(minCost==0){
break;
}
}
let leftIndex,rightIndex,leftCost,rightCost;
if(arr.length>k){
if(minCostIndex==0){
let str="";
for(let num=0;num<k;num++){
if(num==k-1){
str=str+arr[num]
}else{
str=str+arr[num]+",";
}
}
console.log(str);
}
if(minCostIndex==arr.length-1)
{
let str="";
for(let num=arr.length-1-k;num<=arr.length-1;num++){
if(num==arr.length-1){
str=str+arr[num]
}else{
str=str+arr[num]+",";
}
}
console.log(str);
}
let All=1;
if(minCostIndex!=0&&minCostIndex!=arr.length-1){
leftIndex=minCostIndex-1;
rightIndex=minCostIndex+1;
for(;leftIndex>0,rightIndex<=arr.length-1;){
leftCost=Math.abs(arr[leftIndex]-x);
RightCost=Math.abs(arr[rightIndex]-x);
if(leftCost<=RightCost){
All++
leftIndex--;
}else{
All++;
rightIndex++;
}
if(All==k){
break;
}
}
leftIndex++;
rightIndex--;
let str="";
for(let num1=leftIndex;num1<=leftIndex+k-1;num1++)
{
if(num1==leftIndex+k-1){
str=str+arr[num1]
}else{
str=str+arr[num1]+",";
}
}
console.log(str);
}
}
else
{
console.log(arr);
} #include <bits/stdc++.h>//ASI
typedef long long ll;
using namespace std;
int main()
{
int i=0,j,n=0,k,x,a[100005],l,r;
string s;
getline(cin,s);
while(i<s.length())
{
int sum=0;
while(isdigit(s[i]))
sum=sum*10+s[i++]-'0';
a[++n]=sum;
i++;
}
cin>>k>>x;
sort(a+1,a+n+1);
l=1,r=k;
while(r+1<=n&&x-a[l]>a[r+1]-x)
l++,r++;
for(i=l;i<r;i++)
cout<<a[i]<<",";
cout<<a[r];
return 0;
}
import scala.io._
import scala.math._
object findElements {
def find2 (inputArray: Array[Int],k:Int, x:Int): String = {
var result: String = ""
val len = inputArray.length
val arr_x = inputArray.map(e => e - x)
val arr_k = arr_x.sortBy(e => abs(e)).slice(0,k)
arr_k.map(e => result += inputArray(arr_x.indexOf(e)))
result
}
def main(args: Array[String])= {
val inputArray = StdIn.readLine().split(',').map(e => e.toInt)
val k = StdIn.readInt()
val x = StdIn.readInt()
val result = find2(inputArray,k,x).sorted
println(result)
result.foreach(e => if(result.indexOf(e) != result.length-1) print(s"$e,"))
print(result.last)
}
}
arr = list(map(int, input().split(',')))
k = int(input())
x = int(input())
arr_x = [item - x for item in arr]
arr_k = sorted(arr_x, key=lambda x: abs(x))[:k]
result = []
for item in arr_k:
result.append(arr[arr_x.index(item)])
result.sort()
print(','.join([str(item) for item in result])) import java.util.Arrays;
import java.util.Scanner;
import java.util.function.IntPredicate;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String s = input.nextLine();
String[] str = s.split(",");
int[] array = new int[str.length];
for(int i=0;i<str.length;i++){
array[i]= Integer.parseInt(str[i]);
}
int k = input.nextInt();
int x = input.nextInt();
int min=10000;
int position = 0;
for(int i=0;i<array.length-k;i++){
int sum=0;
for(int j=0;j<k;j++){
sum += Math.abs(array[i+j]-x);
}
if(sum < min){
min = sum;
position=i;
}
}
int[] array2 = Arrays.copyOfRange(array, position,position+k);
for(int i=0;i<array2.length;i++){
System.out.print(array2[i]);
if(i!=array2.length-1){
System.out.print(",");
}
}
}
}