华为上机练习题--求两个数组的总和

题目:

求两个数组的和差:就是去掉两个数组中相同的元素 然后将两个数组中的元素存放在一个新的数组中,且数组A中元素要在B数组元素之前

如:输入: int[] a={1,2,4,7,6,9};

int[] b={2,4,3,10};

输出: int[] c = {1, 7, 6, 9, 3, 10};

分析: 剔除相同的元素要互相比较, 然后将不同的元素先后插入新的数组中, 所以我将重点放在比较上, 有可能效率有点低, 大家有什么好的想法可以分享下;

代码如下:

package com.wenj.test;

import java.util.ArrayList;

import java.util.List;

/*

* 求两个数组的和差:就是去掉两个数组中相同的元素 然后将两个数组中的元素存放在一个新的数组中

*  且数组A中元素要在B数组元素之前

*/

public class TestGetNewArr {

public static void main(String args[]){

int[] a={1,2,4,7,6,9};

int[] b={2,4,3,10};

int[] c;

TestGetNewArr tg = new TestGetNewArr();

c = tg.getNewArr(a, b);

for(int i=0; i<c.length; i++){

System.out.print(c[i] + " ");

}

}

public int[] getNewArr(int[] a, int[] b){

List<Integer> aL = new ArrayList<Integer>();

for(int i=0; i<a.length; i++){//a与b的相比,相同的则不放进新的数组中

boolean isExist = false;

for(int j=0; j<b.length; j++){

if(a[i] == b[j]){

isExist = true;

}

}

if(!isExist){

aL.add(a[i]);

}

}

for(int i=0; i<b.length; i++){

boolean isExist = false;

for(int j=0; j<a.length; j++){

if(b[i] == a[j]){

isExist = true;

}

}

if(!isExist){

aL.add(b[i]);

}

}

int[] c = new int[aL.size()];

for(int i=0; i<c.length; i++){

c[i] = aL.get(i);

}

return c;

}

}

华为上机练习题--求两个数组的总和

时间: 2024-12-13 16:55:04

华为上机练习题--求两个数组的总和的相关文章

华为上机练习题--按照新规则排序

题目: * 给定一个数组input[] ,如果数组长度n为奇数, * 则将数组中最大的元素放到 output[] 数组最中间的位置, * 如果数组长度n为偶数, * 则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上, * 然后再按从大到小的顺序,依次在第一个位置的两边, * 按照一左一右的顺序,依次存放剩下的数. * 例如: *  input[] = {3, 6, 1, 9, 7} *  output[] = {3, 7, 9, 6, 1}; *  input[] =

华为上机练习题--姓名夫妻相

题目: 在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是"夫妻相".所谓"夫妻相",就是两个人看上去比较般配,长相.身材等某些方面有一定的相似度.本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具"夫妻相"的人. 题目中预先给定一组女士的姓名拼音.输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名. 规则1:如果字母重复数最多的女士有多位相同,则以最先匹配的女士做为最

华为上机练习题--按身高找出最佳二人组

题目: 要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高. Smple input:161 189 167 172 188 Sample outPut: 188 189 分析:我的理解就是先逆序排好数值, 然后逐对比较身高差值, 找出身高差值最小的然后输出 代码如下: package com.wenj.test; /** * 要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-

华为上机练习题--按位取反操作

题目: 求指定位取反后的结果(用异或来进行指定位数的取反) *   输入:0x1234 3 *   输出:0x123c 分析:从网上看到这道题发现蛮有意思的, 记得当时学C语言的时候就有过这种的操作,只不过时间久了就有些健忘, 经过努力追忆后终于想起些些, 现在做出如下总结: *   AND--> & --> AND指令主要用于使操作数若干位不变, 而使某些位为'0'的场合 *   OR --> | --> OR 指令主要用于使操作数若干位不变, 而使某些位为'1'的场合

华为上机练习题--压缩字符串

题目: 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串. 压缩规则: 1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc". 2.压缩字段的格式为"字符重复的次数+字符".例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz". 要求实现函数: void str

华为上机练习题--简单加减表达式计算

题目: 通过键盘输入100以内正整数的加.减运算式,请编写一个程序输出运算结果字符串. 输入字符串的格式为:"操作数1 运算符 操作数2","操作数"与"运算符"之间以一个空格隔开. 补充说明: 1.操作数为正整数,不需要考虑计算结果溢出的情况. 2.若输入算式格式错误,输出结果为"0". 要求实现函数: void arithmetic(const char *pInputStr, long lInputLen, char *

求两个数组的交集

问题: 给你两个排序的数组,求两个数组的交集. 比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么交集就是 3 5. 思路: 1. 每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存.该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度. 2. 因为A B 都排过序,所以,每一次从B数组取值后,可以利用二分查找看是否在数组A里有B所对应的值,这样复杂度变成了O(N lg M). 这里,如果N 比 M 大,可以从A中取值,然后在B中判断是否有A

华为上机练习题--统计各小写字符出现的次数

题目: 手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出.提示可以用map 例子:输入:aaabbbccc 输出:a 3 b 3 c 3 分析: 看到后面的提示,简直就是不用动脑,直接简单粗暴的顺势而上 直接上代码: import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class TestCharAcount

华为上机练习题--计算表达式

题目: 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形. 例如:  输入:3+8×2/9-2 输出:2 函数原型 public int getMyRet(String str) 分析: 这个题目略显高端啊, 像我这种非专业的自学者,还真没有学过编译原理之类的课程, 要自己实现一个这种小型的编译器是非常困难啊, 所幸的是这个题目是用java来实现的, 而我本身也曾经看到过用java来实现这类的问题, 这类问题有一种方法就是实现类编译器功能的函数, 这个我是驾驭不