数组练习题-java

目录

1.判断一个数组里是否有重复的数

2.判断数组是否是对称数组 

3. 定义一个数组,用来存储1 1 2 3 5 8 13……这样的Fibonacci数列,存储该数列的前20个数;

4.定义一个10个元素的数组,编写程序,随机打乱顺序;

5. 将两个已经排序的数组合并,合并之后,按大小进行排序;

6.定义一个数组,例如: int[]  arr = {1,2,23,1,1,2,3,4};将数组中的元素,去重,变成 int[] newArr = {1,2,3,4,23};

7.定义连个数组,一个数组存储去重后的的 电话号码,例如: int[] myPhone = {1,5,7,6,3};将这个数组输出,得出 15776635351

8.将一个正整数如35转换成二进制码

9.已知一个数组,例如int[] a={5,6,8,0,6,,0,1,0,56};写一段代码,要求不使用新数组的情况下,将非0的数字向前移动,将所有的0放非0之后,并说明一下程序执行的时间复杂度;(百度机试题)

移动之后的数据应该如下: a={5,6,8,6,1,56,0,0,0};

10.利用二分法查找数组中的数据的位置,如果不存在,输出-1

11.找出两个已排序的数组中包含的相同元素;

12. 二维数组排序

13. int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;

要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:

int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5} ;


1.判断一个数组里是否有重复的数

import java.util.Scanner;
public class Test{
    public static void main(String[] args){
    //1.判断一个数组里是否有重复的数
        int[] a = {1,2,3,4,5};
        boolean b=false;
        for(int i=0;i<a.length-1;i++){
            for(int j=i+1;j<a.length;j++){
                if(a[i]==a[j]){
                    b=true;
                    break;
                }
            }
            if(b){
                break;
            }
        }
        if(b) {
            System.out.println("有重复的数");
        }else{
            System.out.println("无重复的数");
        }

    }
}

2.判断数组是否是对称数组 

import java.util.Scanner;
public class Test{
    public static void main(String[] args){
    //2.判断数组是否是对称数组
        int[] a = {1,2,3,2,1};
        boolean b=true;
       for(int i=0;i<a.length/2;i++){
           if (a[i]!=a[a.length-1-i]){
              b=false;
              break;
           }
       }
       if(b){
           System.out.print("是");
       }else{
           System.out.print("不是");
       }
    }
}

3. 定义一个数组,用来存储1 1 2 3 5 8 13……这样的Fibonacci数列,存储该数列的前20个数;

 import java.util.Arrays;
import java.util.Scanner;
public class Test{
public static void main(String[] args){
int[] arr = new int[20];
arr[0]=1;
arr[1]=1;
for(int i=2;i< arr.length;i++){
arr[i] = arr[i-1]+arr[i-2];
}
System.out.println(Arrays.toString(arr));
  }
}

4.定义一个10个元素的数组,编写程序,随机打乱顺序;

import java.util.Arrays;
import java.util.Random;

public class Random_sort {
    public static void main(String[] args) {
        //4.定义一个10个元素的数组,编写程序,随机打乱顺序;
        int[] arr = {2,3,5,4,7,5,7,9,1,45};
        Random random = new Random();
        //思路:遍历数组,利用随机数产生0-9的随机索引,把随机索引所代表的值与当前值(交换)
        int t;
        for(int i = 0;i< arr.length;i++){
            int index = random.nextInt(arr.length);
            t = arr[i];
            arr[i] = arr[index];
            arr[index] = t;

        }
        System.out.println(Arrays.toString(arr));
    }
}

5. 将两个已经排序的数组合并,合并之后,按大小进行排序;

public class Merge {
	public static void main(String[] args) {	
		int[] a={1,2,8,45,89};
		int[] b={3,4,6,9,30,66,100};
		
		//1.创建一个数组c
		int[] c=new int[a.length+b.length];
		
		int c_i=0;
		int a_i=0;
		int b_i=0;
		for(int i=0;i<c.length;i++) {
			if(a_i==a.length) {//如果a中的元素已取完,直接取b中的元素
				c[i]=b[b_i++];
			}else if(b_i==b.length) {//如果b中的元素已取完,直接取a中的元素
				c[i]=a[a_i++];
			}else {//取元素小的元素的那个数组
				if(a[a_i]<b[b_i]) {
					c[i]=a[a_i++];
				}else {
					c[i]=b[b_i++];
				}
			}
		}
		

		System.out.println(Arrays.toString(c));
	}

}

6.定义一个数组,例如: int[]  arr = {1,2,23,1,1,2,3,4};将数组中的元素,去重,变成 int[] newArr = {1,2,3,4,23};

import java.util.Arrays;

public class 去重 {
    public static void main(String[] args) {
        int[]  arr = {1,2,23,1,1,2,3,4};
        int[] newArr = new int[8];
        boolean[] b = new boolean[8];
        int index = 0;
        for(int i = 0;i< arr.length-1;i++){
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]==arr[j]){
                    b[i] = true; //有相等的
                    break;
                }
            }
        }
        for(int i = 0;i<b.length;i++){
            if (!b[i]){
                newArr[index++] = arr[i];
            }
        }
        System.out.println(Arrays.toString(newArr));
        //System.out.println(Arrays.toString(b));
    }
}

7.定义连个数组,一个数组存储去重后的的 电话号码,例如: int[] myPhone = {1,5,7,6,3};将这个数组输出,得出 15776635351

import java.util.Arrays;
import java.util.Random;

public class Random_sort {
    public static void main(String[] args) {
        //7.定义连个数组,一个数组存储去重后的的 电话号码,
        // 例如: int[] myPhone = {1,5,7,6,3};将这个数组输出,得15776635351
        int[] myPhone = {1,5,7,6,3};
        int[] myphone1={0,1,2,2,3,3,4,1,4,1,0};
        //把数组myphone1的值作为myPhone的下标
        int[] real_phone = new int[11];
        int index=0;
        for(int i=0;i<myphone1.length;i++){
           real_phone[index++] = myPhone[myphone1[i]];
        }
        System.out.println(Arrays.toString(real_phone));
    }
}

8.将一个正整数如35转换成二进制码

import java.util.Arrays;
import java.util.Random;

public class Random_sort {
    public static void main(String[] args) {
        //8.将一个正整数如35转换成二进制码
        String b = Integer.toBinaryString(35);
        System.out.println(b);

    }
}

9.已知一个数组,例如int[] a={5,6,8,0,6,,0,1,0,56};写一段代码,要求不使用新数组的情况下,将非0的数字向前移动,将所有的0放非0之后,并说明一下程序执行的时间复杂度;(百度机试题)

移动之后的数据应该如下: a={5,6,8,6,1,56,0,0,0};

1.暴力法

package com.moju;
import java.util.Arrays;
import java.util.Scanner;
public class Mtest {
	public static void main(String[] args) {
		//已知一个数组,例如int[] a={5,6,8,0,6,0,1,0,56};
		//写一段代码,要求不使用新数组的情况下,将非0的数字向前移动,
		//将所有的0放非0之后,并说明一下程序执行的时间复杂度;(百度机试题)
       //移动之后的数据应该如下:
       //a={5,6,8,6,1,56,0,0,0};
	  int[] a={5,6,8,0,6,0,1,0,56};
	  int t;
		for(int i=0;i<a.length;i++) {
			if(a[i]==0) {
				for(int j=i+1;j<a.length;j++) {
					if(a[j]!=0) {
						t = a[j];
						a[j] = a[i];
						a[i] = t;
						break;
					}
				}
			}
		}
		System.out.print(Arrays.toString(a));	
	}

}

2. 双指针法 

10.利用二分法查找数组中的数据的位置,如果不存在,输出-1

11.找出两个已排序的数组中包含的相同元素;

 package com.moju; 
import java.util.Arrays;
import java.util.Scanner;
 public class Mtest {
public static void main(String[] args) {
	//找出两个已排序的数组中包含的相同元素;
	int[] nums1 = {3,56,78,78};
	int[] nums2 = {0,1,2,3,78};
	int[] nums3 = new int[5];
	int i = 0,j = 0,index=0;
	while(i<nums1.length&&j<nums2.length) {
		if(nums1[i]>nums2[j]) {
			j++;
		}else if(nums1[i]<nums2[j]) {
			i++;
		}else {
			nums3[index++] = nums1[i];
			i++;
			j++;
		}
	}
	System.out.print(Arrays.toString(nums3));	

}
}

12. 二维数组排序

package com.moju.practice;

public class 二维数组排序 {
	
	public static void main(String[] args) {
			 	 // 1 1	 	 2 3 4	 	7 8 34 54
	int[][] aaa = {{8,2} , {54,1,3} , {1,7,34,4}}; 	     		
	
	//1.将二维数组 变成一维数组
	int count = 0;
	//你要知道一维数组多长?
	for(int i =0; i < aaa.length;i++) {
		for(int j = 0; j < aaa[i].length;j++) {
			count++;
		}
	}
	//一维数组的长度确定了  9
	int[] newArr = new int[count];
	int haha = 0;
	//一维数组长度确定了,将二维数组的元素,导入到一维数组中
	for(int i =0; i < aaa.length;i++) {
		for(int j = 0; j < aaa[i].length;j++) {
				newArr[haha++] = aaa[i][j];
		}
	}
	
	//2.将一维数组排序
	for(int i = 0 ;i < newArr.length-1;i++) {
		for(int j = 0; j < newArr.length-1-i;j++) {
			if(newArr[j] > newArr[j+1]) {
				int temp = newArr[j];
				newArr[j] = newArr[j+1];
				 newArr[j+1] = temp;
			}
		}
	}
	
	//排序后 遍历一维数组看看对不对
	for(int i = 0;i < newArr.length; i++) {
		System.out.print(newArr[i]+" ");
	}
	
	//重新清零
	haha = 0;
	//3.在将一维数组 变成 二维数组
	for(int i =0; i < aaa.length;i++) {
		for(int j = 0; j < aaa[i].length;j++) {
			aaa[i][j] = newArr[haha++];
		}
	}
	System.out.println("我是二维数组输出结果");
	//遍历二维数组看看对不对
	
	System.out.print("{");
	for(int i =0; i < aaa.length;i++) {
		System.out.print("{");
		for(int j = 0; j < aaa[i].length;j++) {
			if(j == aaa[i].length-1) {
				System.out.print(aaa[i][j]+"}");
			}else {
				System.out.print(aaa[i][j]+",");
			}
		}
		if(i != aaa.length-1) {
			System.out.print(",");
		}
	}
	System.out.print("}");	
	}
}

13. int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;

要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:

int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5} ;

import java.util.Scanner;
public class Test{
    public static void main(String[] args){
     //int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
        // 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:
        //    int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5} ;
        int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
        int count=0;
        for(int i = 0;i<oldArr.length;i++){
            if (oldArr[i]!=0){
                count++;
            }
        }
        int[] newArr = new int[count];
        int index=0;
        for (int i = 0;i<oldArr.length;i++){
            if(oldArr[i]!=0){
                newArr[index] = oldArr[i];
                index++;
            }
        }
        for(int i:newArr){
            System.out.print(i+" ");
        }

    }
}

14.静态初始化二维数组 {{9},{2,7},{4,1,6},{2,17,5}},求出最大数,最小数和平均值

import java.util.Arrays;
public class Random_sort {
    public static void main(String[] args) {
        //静态初始化二维数组 {{9},{2,7},{4,1,6},{2,17,5}},求出最大数,最小数和平均值
        int[][]arr = {{9},{2,7},{4,1,6},{2,17,5}};
        int max,min,sum=0,count=0,t;
        max=arr[0][0];
        min=arr[0][0];
        for(int i = 0;i<arr.length;i++){
            for(int j = 0;j<arr[i].length;j++){
                count++;
                sum+=arr[i][j];
                if(max<arr[i][j]){
                    t = arr[i][j];
                    arr[i][j] = max;
                    max = t;
                }
                if(min>arr[i][j]){
                    t = arr[i][j];
                    arr[i][j] = min;
                    min = t;
                }
            }
        }
        System.out.println("最小值: "+min);
        System.out.println("最大值: "+max);
        System.out.println("平均值: "+(double)(sum/count));

    }
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值