在线编程笔试练习2(京东)

时间限制:1秒 空间限制:32768K 热度指数:9801

题目描述

给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。

输入描述:

每组输入数据分为三行,第一行有两个数字n,m(0 ≤ n,m ≤ 10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。

输出描述:

针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。

示例1

输入

3 3
1 3 5
2 4 6

输出

1 2 3 4 5 6

自己的low方法(没通过)

 1 import java.util.Scanner;
 2
 3 /*
 4  * To change this license header, choose License Headers in Project Properties.
 5  * To change this template file, choose Tools | Templates
 6  * and open the template in the editor.
 7  */
 8
 9 /**
10  *
11  * @author zhangtao
12  */
13 public class Test2 {
14     public static void main(String[] args)
15     {
16         int m,n;
17         int[] A;
18         int[] B;
19         Scanner scanner=new Scanner(System.in);
20         m=scanner.nextInt();
21         n=scanner.nextInt();
22         A=new int[m];
23         B=new int[n];
24         //录入数据
25         for(int i=0;i<m&&scanner.hasNext();i++)
26         {
27             A[i]=scanner.nextInt();
28         }for(int j=0;j<m&&scanner.hasNext();j++)
29         {
30             B[j]=scanner.nextInt();
31         }
32         //按要求排序输出
33         sortAandB(A,B);
34     }
35     static void sortAandB(int[] A,int[] B)
36     {
37         int totallong=A.length+B.length;
38         int[]C=new int[totallong];
39         //将A与B合并
40         int i=0;
41         while(i<A.length)
42         {
43             C[i]=A[i];
44             i++;
45         }
46         while(i>=A.length&&i<totallong)
47         {
48             C[i]=B[i-A.length];
49             i++;
50         }
51        quickSort(C,0,totallong-1) ;
52        for(int j=0;j<totallong;j++)
53        {
54            if(j!=totallong-1)
55            {
56                System.out.print(C[j]+" ");
57            }
58            else
59            {
60                 System.out.print(C[j]+"");
61            }
62        }
63     }
64     //快速排序
65     static int partition(int a[], int low, int high) {
66          int privotKey = a[low];                                 //基准元素
67          while (low < high) {                                    //从表的两端交替地向中间扫描
68              while (low < high && a[high] >= privotKey) //从high 所指位置向前搜索,至多到low+1 位置。将比基准元素小的交换到低端
69              {
70                  --high;                                         //从右找比基准元小的
71              }
72              a[low] = a[high];                                    //如果比基准元素小,交换
73              a[high] = privotKey;
74
75              while (low < high && a[low] <= privotKey) {
76                  ++low;                                          //从右找比基准元大的
77              }
78              a[high] = a[low];                                    //如果比基准元素,交换
79              a[low] = privotKey;
80
81          }
82          return low;
83      }
84      static void quickSort(int a[], int low, int high) {
85          if (low < high) {
86              int privotLoc = partition(a, low, high);  //将表一分为二
87              quickSort(a, low, privotLoc - 1);          //递归对低子表递归排序
88              quickSort(a, privotLoc + 1, high);        //递归对高子表递归排序
89          }
90      }
91 }

大神方案一

 1 import java.util.Iterator;
 2 import java.util.Scanner;
 3 import java.util.Set;
 4 import java.util.TreeSet;
 5 //集合合并
 6 public class Test2 {
 7
 8     public static void main(String[] args) {
 9         Scanner scan=new Scanner(System.in);
10         Set<Integer>set=new TreeSet<Integer>();
11         while(scan.hasNext()){
12             String str1=scan.nextLine();
13             String result1[]=str1.split(" ");
14             int n=Integer.parseInt(result1[0]);
15             int m=Integer.parseInt(result1[1]);
16             String str2=scan.nextLine();
17             String result2[]=str2.split(" ");
18             for(int i=0;i<result2.length;i++){
19                 set.add(Integer.parseInt(result2[i]));
20             }
21             String str3=scan.nextLine();
22             String result3[]=str3.split(" ");
23             for(int x=0;x<result3.length;x++){
24                 set.add(Integer.parseInt(result3[x]));
25             }
26             Iterator<Integer>iter=set.iterator();
27             StringBuffer sub=new StringBuffer();
28             while(iter.hasNext()){
29                 sub.append(iter.next()).append(" ");
30             }
31             sub.delete(sub.length()-1, sub.length());
32             System.out.println(sub.toString());
33         }
34
35     }
36
37 }

大神方案二

 1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3 import java.util.Iterator;
 4 import java.util.Set;
 5 import java.util.TreeSet;
 6
 7 public class Main {
 8     public static void main(String[] args) throws Exception {
 9         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10         String line = null;
11         while((line = br.readLine()) != null){
12             String[] s = line.split(" ");
13             int n = Integer.parseInt(s[0]);
14             int m = Integer.parseInt(s[1]);
15             Set<Integer> set = new TreeSet<Integer>();
16             line = br.readLine();
17             String[] s1 = line.split(" ");
18             for(int i=0;i<n;i++){
19                 set.add(Integer.parseInt(s1[i]));
20             }
21             line = br.readLine();
22             String[] s2 = line.split(" ");
23             for(int i=0;i<m;i++){
24                 set.add(Integer.parseInt(s2[i]));
25             }
26             Iterator<Integer> it = set.iterator();
27             StringBuffer sb = new StringBuffer();
28             while(it.hasNext()){
29                 sb.append(it.next());
30                 sb.append(" ");
31             }
32             sb.delete(sb.length()-1, sb.length());
33             System.out.println(sb.toString());
34         }
35     }
36 }

时间: 2024-10-16 05:24:55

在线编程笔试练习2(京东)的相关文章

微软2017年预科生计划在线编程笔试第二场 Queen Attack

排序. 分别按照$x$,$y$以及对角线排序,统计一下方案数就可以了. #include<bits/stdc++.h> using namespace std; int n; struct X { int x,y; }s[100010]; bool cmp1(X a, X b) { return a.x<b.x; } bool cmp2(X a, X b) { return a.y<b.y; } bool cmp3(X a, X b) { return a.x+a.y<b.x

微软2017年预科生计划在线编程笔试第二场 Diligent Robots

模拟. 不断分裂,然后计算时间,取个最小值.我也不知道这做法对不对的,读完题猜了一下,抱着$WA$的心态$submit$了,然后跳出一个$AC$. #include<bits/stdc++.h> using namespace std; long long n; int q; int main() { scanf("%lld%d",&n,&q); long long now=1; long long ans=n; long long ci=0; while(

微软2017年预科生计划在线编程笔试第二场 EL SUENO

树上背包. 简单的树形$dp$,计算出摧毁每一个节点所需的最小费用,背包即可. #include<bits/stdc++.h> using namespace std; struct X { int fa; int in; int ip; int c; }s[2010]; int dp[2010][20010]; int cost[2010]; int f[20010]; vector<int>g[2010]; int n,root,ans; void dfs(int x) { i

微软2017年预科生计划在线编程笔试

Legendary Items 答案是每一件物品需要的期望步数和 1 #include <bits/stdc++.h> 2 #define ll long long 3 #define ull unsigned long long 4 #define st first 5 #define nd second 6 #define pii pair<int, int> 7 #define pil pair<int, ll> 8 #define pli pair<ll,

hihocoder1489 Legendary Items (微软2017年预科生计划在线编程笔试)

http://hihocoder.com/problemset/problem/1489 笔试题第一道,虽然说第一道都很水,但是我感觉这题不算特别水把..这道题我就卡住了我记得,tle,最后只有30分,比较惨烈.我个人感觉这道题正解比较难想把,那时候太年轻,没有想到当item很大时,可以从第八道item开始就把初始p当成0来计算..不过我试了一下,发现即使如此,还要计算每次的数学期望,反正我当时要是不知道,Ei和Ei+1之间的联系,应该还是算不出来..我太麻瓜了.. 贴一下我tle代码,思路就是

Java中的 Scanner简述(企业笔试在线编程的输入控制)

摘要: 最近进行企业在线笔试时,发现企业的笔试平台大都使用赛码网(虽然槽点很多),而且在线编程都需要使用Scanner来读取程序的输入,因此,笔者就在先辈们的成果上对Scanner做了一份全新的.详细的总结.我们知道,java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java API文档中列举了大量的API方法,但是都不怎么地,特此简述. 版权声明: 本文原创作者:书呆子Rico 作者博客地址:http

【平安科技】在线编程大赛活动

1. 活动名称:[现金大奖]平安科技在线编程大赛:一份"奇妙"的银行流水 题目详情: 一份银行流水数据,因打印模糊导致部分金额不清楚. 收入.支出.余额满足以下3条规则: 1.收入.支出.余额三列都是数字 2.同一行收入和支出的值不能同时为非零值 3.第N-1行余额(+第N行收入或-第N行支出)=第N行余额 程序语言: java 请按照规则编写算法,修复不清楚的值 输入描述: 输入数据最多25行,每行都包含四个数据,分别是:数据编号,收入.支出.余额,模糊的数据以?表示,它们之间以;隔

第五届在线编程大赛月赛第一题:完全平方数的个数

第五届在线编程大赛月赛第一题:完全平方数的个数 题目详情: 给定整数区间[A,B]问其中有多少个完全平方数. 输入格式: 多组数据,包含两个正整数A,B 1<=A<=B<=2000000000. 输出格式: 每组数据输出一行包含一个整数,表示闭区间[A,B]中包含的完全平方数的个数. 答题说明: 输入样例 1 1 1 2 3 10 3 3 输出样例: 1 1 2 0 java代码: import java.util.Scanner; public class One { public s

Open XML SDK 在线编程黑客松

2015年2月10日-3月20日,开源社 成员 微软开放技术,GitCafe,极客学院联合举办" Open XML SDK 在线编程黑客松 ",为专注于开发提高生产力的应用及服务的程序猿们提供一个在线动手开发,学习交流,技术分享,发挥创意与竞技的盛宴. 我们为参赛队伍准备了丰富的技术干货,国内外高手无私分享以及技术支持,逐步引导的在线学习视频教程与技术文档,场景范例,在线编程及演示环境,社区互动,丰富礼品(如极客学院特别为每位参赛人员提供月VIP码,用户可以免费学习极客学院全网课程)及