- 数组升序
题目描述:
给定两个数组A和B。其中数组A是几乎严格升序排列的,几乎的定义是只需改变其中一个数,即可满足完全升序排列。这里严格升序排列指的是不允许相邻两个为相同的数。请找出数组B中满足要求的最大数,并输出最终的有序数组,如果找不到,输出”NO”。
输入描述:
共两行,第一行是数组A,第二行为数组B,输入之间用空格分割,且len(A),len(B)<100。
输出描述:
最终有序数组,不存在则输出NO
示例:
输入:
1 3 5 7 4 10
2 1 5 8 9
输出:
1 3 7 9 10
#include <vector> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int main(){ vector<int> A; vector<int> B; int tmp; int idx=-1,i=-1; while(scanf("%d",&tmp)!=EOF){ if(tmp!=' ') { A.push_back(tmp); ++i; } if(i>0 && A[i]<=A[i-1]){ idx=i; } if(tmp=='\n') break; } while(scanf("%d",&tmp)!=EOF){ if(tmp!=' ') B.push_back(tmp); } if(idx==-1) { for (int k = 0; k < A.size(); ++k) { if (k > 0) cout << " "; cout << A[k]; } cout << endl; }else{ sort(B.begin(),B.end()); int pos=-1; vector<int>::iterator it; if(idx<A.size()-1){//有左右,更换A[idx] it=upper_bound(B.begin(),B.end(),A[idx-1]);//找到大于左边数A[idx-1]的下标 if(it!=B.end() && *it<A[idx+1]){//找到该数,且这个数在(A[idx-1],A[idx+1])之间 pos=it-B.begin(); }//否则就是没有 }else{ if(idx>1){//不是在前两个数里面 if(A[idx]<=A[idx-2]){//如果这个数小于等于前面第二个数,则只能更换A[idx] it=upper_bound(B.begin(),B.end(),A[idx-1]);//找到大于左边数A[idx-1]的下标
2020秋招拼多多客户端开发笔试题目
最新推荐文章于 2024-08-25 22:13:18 发布