关于数组的常见题型(交叉合并、交集、并集、插入、删除、比较)

public class Arrays{

//求两数组的交集,使交集重新生成一个数组

public static int[] include(int[] a,int[] b){

int temp=0;

int[] arr=new int[a.length];

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

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

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

arr[temp]=a[i];

temp++;

}

}

}

int[] ras=new int[temp];

for(int i=0;i<temp;i++){

ras[i]=arr[i];

}

return ras;

}



//两数组交叉成一个新数组 例 int[] a={1,3,5,7,9,10};int[] b={2,4}; result: int[]c={1,2,3,4,5,7,9,10};

public static int[] merge(int[] a,int[] b){

int[]c=new int[a.length+b.length];

int m=0;

int n=0;

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

if(i%2==0){

if(m>a.length-1){

c[i]=b[n];

}

else{

c[i]=a[m];

m++;

}

}

else{

if(n>b.length-1){

c[i]=a[m];

}

else{

c[i]=b[n];

n++;

}

}

}

return c;

}

//在数组的中间插入一个元素组成新数组

public static int[] insert(int[]arr,int x){

int[] arrs=new int[arr.length+1];

if(arr.length%2==0){

for(int i=0;i<arr.length/2;i++){

arrs[i]=arr[i];

}

arrs[arr.length/2]=x;

for(int i=arr.length/2;i<arr.length;i++){

arrs[i+1]=arr[i];

}

}else{

for(int i=0;i<arr.length/2+1;i++){

arrs[i]=arr[i];

}

arrs[arr.length/2+1]=x;

for(int i=arr.length/2+1;i<arr.length;i++){

arrs[i+1]=arr[i];

}

}

return arrs;

}

//删除数组的中间元素

public static int[] remove(int[] arr){

int[] arrs=new int[arr.length-1];

for(int i=0;i<arr.length/2;i++){

arrs[i]=arr[i];

}

for(int j=arr.length/2+1;j<arr.length;j++){

arrs[j-1]=arr[j];

}

return arrs;

}

//两个数组合并成一个新的数组

public static int[] add(int[]a,int[]b){

int[] c=new int[a.length+b.length];

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

c[i]=a[i];

}

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

c[a.length+j]=b[j];

}

return c;

}

//删除数组中与指定n相同的元素

public static int[] delElement(int arrs[],int n) {

int temp=0;

int[] arr=new int[arrs.length];

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

if(arrs[i]!=n){

arr[temp]=arrs[i];

temp++;

}

}

int[] ras=new int[temp];

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

ras[i]=arr[i];

}

return ras;

}

//比较两个数组的大小

public static int compare(int[] arr1,int[] arr2) {

int flag=0;

if(arr1.length!=arr2.length) {

if(arr1.length>arr2.length) {

flag=1;

} else {

flag=2;

}

}else {

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

if(arr1[i]>arr2[i]) {

flag=1; break;

}else if(arr1[i]<arr2[i]) {

flag=2;break;

}

}

}

return flag;

}

//取数组中<=min >=max 的元素组成的新数组

public static int[] delElement(int arrs[],int min,int max) {

int[]arr=new int[arrs.length];

int temp=0;

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

if(arrs[i]<=min || arrs[i]>=max){

arr[temp]=arrs[i];

temp++;

}

}

int []ras=new int[temp];

for(int i=0;i<temp;i++){

ras[i]=arr[i];

}

return ras;

}

//求两个数组的并集 如int[]arr1={1,2,3,5,8}; int[]arr2={2,5,7,8,9}; result: int[]arr={1,2,3,5,7,8,9};

public static int[] merges(int[] arr1, int[] arr2) {

int[] arr3 =new int[arr1.length];

int ai= 0;

for(int i= 0; i<arr1.length ;i++){ //此循环求两数组相同的元素组成的新数组arr3[]

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

if(arr1[i]==arr2[j]){

arr3[ai]=arr1[i];

ai++;

}

}

}

int[] arr4 = new int[arr2.length-ai];

int a4=0;

int a3= 0;

for(int i = 0 ;i<arr2.length; i++){ //数组arr2中除去arr3[]中得到的新数组arr4

if(arr2[i]!=arr3[a3]){

arr4[a4]=arr2[i];

a4++;

}else{

a3++;

}

}

int[] arr = new int[arr1.length+arr4.length];

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

if(i<arr1.length){

arr[i]=arr1[i];

}else{

arr[i]=arr4[i-arr1.length];

}

}

return arr;

}

//打印数组

public static void printArray(int[]arr){

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

System.out.println(arr[i]);

}

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值