给定一个排序好的数组,两个整数 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(","); } } } }