在笔试中遇到的数组编程题

前些天笔试中遇到的一道算法题,很简单,但是想发出来给同样是小白的小伙伴看一下,或许有用。

  • 需求:已知有两个数组a和b,数组里面的数字已经从小到大排好序,且每个数组中没有重复的数字,编写程序数组c,c是数组a和数组b的并集,且数组c中的数字要从小到大排好序,并且不重复。
  • 不允许使用  for(i = 1 to m){
  •                        for(j = 1 to n){
  •               ........
  • }
  • }

方法一:利用最原始的数组来编程

  • package Demo;
  • /**
  •  * 
  •  * @author Doraemon
  •  *
  •  */
  • public class Demo1 {
  •     public static void main(String[] args) {
  •         /**
  •          * 定义a和b两个数组
  •          */
  •         int a[] = { 1, 3, 8, 45 };
  •         int b[] = { 2, 3, 11, 12, 15, 20, 55 };
  •         //定义数组c并且长度是数组a+数组b的长度
  •         int c[] = new int[a.length + b.length];
  •         //定义两个变量
  •         int x = 0, y = 0;
  •         //循环3个数组
  •         for (int i = 0, j = 0, z = 0;;) {
  •             //判断如果i小于a的长度并且j小于b的长度,将a中的元素赋给x,b中的元素赋给y
  •             if (i < a.length && j < b.length) {
  •                 x = a[i];
  •                 y = b[j];
  •                 //如果x小于y,将小的放进数组c中
  •                 if (x < y) {
  •                     c[z] = x;
  •                     i++;
  •                     z++;
  •                 } else if (x == y) {
  •              //如果x等于y,将x的放进数组c中
  •                     c[z] = x;
  •                     i++;
  •                     j++;
  •                     z++;
  •                 } else {
  •                     // x>y
  •                     c[z] = y;
  •                     j++;
  •                     z++;
  •                 }
  •             } else if (i >= a.length && j < b.length) {
  •                 //如果i中的元素循环完b中没有循环完将b中的元素赋给数组c
  •                 c[z] = b[j];
  •                 j++;
  •                 z++;
  •             } else if (i < a.length && j >= b.length) {
  •                 //如果i中没有循环完b中元素循环完将a中的元素赋给数组c
  •                 c[z] = a[i];
  •                 i++;
  •                 z++;
  •             } else {
  •                 break;
  •             }
  •         }
  •         //循环数组c,并打印
  •         for (int i = 0; i < c.length; i++) {
  •             System.out.println(c[i]);
  •         }
  •     }
  • }
  •  

方法二:利用集合来编程

 

  • package Demo;
  • /**
  •  * @author Doraemon
  •  */
  • import java.util.TreeSet;
  • public class Demo2 {
  •     public static void main(String[] args) {
  •         //定义数组
  •         int a[] = {1,3,8,20};
  •         int b[] = {2,3,8,12,15,20,26};
  •         //定义一个TreeSet集合,他是有序的
  •         TreeSet set = new TreeSet();
  •         //循环遍历数组a中的元素将其添加到set中
  •         for (int i = 0; i < a.length; i++) {
  •             set.add(a[i]);
  •         }
  •         //循环遍历数组b中的元素将其添加到set中
  •         for (int i = 0; i < b.length; i++) {
  •             set.add(b[i]);
  •         }
  •         //将set集合转换为object对象数组
  •         Object obje[] = set.toArray();
  •         //定义一个c数组长度为obje的长度
  •         int c[] = new int[obje.length];
  •         //循环遍历
  •         for (int i = 0; i < c.length; i++) {
  •             c[i] = (int) obje[i];
  •             System.out.println(c[i]);
  •         }
  •         
  •         
  •     }
  • }
     

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值