Java排序及二维数组练习

这篇博客包含了多个Java编程题目,涉及数组排序、去重、打乱顺序、移动0元素、杨辉三角和盛水最多的容器问题,旨在锻炼和提升对Java数组和排序算法的掌握。内容涵盖Arrays工具类的使用,如排序、查找、拷贝等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【编程题】

1.判断一个数组里是否有重复的数,假设数组名为int[] array
您的回答:

import java.util.*;
public class Test{
	public static void main(String args[]){ 
		//判断一个数组里是否有重复的数,假设数组名为int[] array   做笔记!!!
		int[] array=new int[5];
		Scanner sc=new Scanner(System.in);
		for(int i=0;i<array.length;i++) {
			array[i]=sc.nextInt();
		}
		System.out.println(Arrays.toString(array));
		Arrays.sort(array);
		int count = 1;
		boolean flag = true;
		for(int i = 1;i<array.length;i++) {
			if(array[count-1]!=array[i])
				flag = false;
			else
				flag = true;
			count++;
		}
		if(flag)
			System.out.print("重复");
		else
			System.out.println("不重复");
	}
}

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

import java.util.Arrays;
import java.util.*;
public class Test{
//定义一个10个元素的数组 编写程序,随机打乱顺序;  
	public static void main(String[] args) {
		int[] array=new int[10];
		Scanner sc=new Scanner(System.in);
		for(int i=0;i<array.length;i++) {
			array[i]=sc.nextInt();
		}
		System.out.println(Arrays.toString(array));
		for(int i=0;i<array.length;i++){
			int k=(int)(Math.random()*array.length);
			int temp=array[k];
			array[k]=array[i];
			array[i]=temp;
		}
		System.out.println(Arrays.toString(array));
	}
}

3.找出两个已排序的数组中包含的相同元素;
您的回答:

public class Test {
	    public static void main(String[] args) {
	        int[] arr = new int[]{1,2,3,5,6};
	        int[] arr1 = new int[]{1,3,6,8,9,12,16,18};
	        for (int i=0;i<arr.length;i++){
	            for (int j=0;j<arr1.length;j++){
	                if(arr[i]==arr1[j]){
	                    System.out.print(arr[i]+" ");
	                }
	            }
	        }
	    }
	}

4.现在有如下的一个数组:
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.Arrays;
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} ;
		int newArr[]=new int[oldArr.length];
		int j = 0;
		for(int i = 0;i<oldArr.length;i++) {
			if(oldArr[i]!=0) {
				newArr[j]=oldArr[i];
				j++;
			}
		}
		for(int k = 0;k<j;k++) {
		System.out.print(newArr[k]+" ");
	}
	}
}

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

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

import java.util.Arrays;
public class Test15 {
	public static void main(String[] args) {
		int a[]={5,6,8,0,6,0,1,0,56};
		for(int i = 0;i<a.length;i++) {
			if(a[i]==0) {
				for(int k=i;k<a.length-1;k++) {
					int temp = a[k];
					a[k]=a[k+1];
					a[k+1]=temp;
				}
			}
		}
		
		System.out.print(Arrays.toString(a));
	
	}
}

6、 【编程题】
给你一个有序数组 nums ,创建一个新的数组nums2,使每个元素只出现一次;
例 1:
输入:nums = [1,1,2]
输出:nums2 = [1,2]
示例 2:
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:nums2 = [0,1,2,3,4]
您的回答:

import java.util.Arrays;
import java.util.Scanner;
public class Test12 {
    public static void main(String[] args) {
        /*给你一个有序数组 nums ,创建一个新的数组nums2,使每个元素只出现一次;*/
    	int[] nums=new int[5];
    	int[] nums2=new int[nums.length];
    	Scanner sc=new Scanner(System.in);
    	for(int i=0;i<nums.length;i++) {
    		nums[i]=sc.nextInt();
    	}
    	
//    	int [] nums = {0,0,1,1,1,2,2,3,3,4};
        int count = 1;
        int temp = nums[0];
        for(int i = 0;i<nums.length;i++){
            if(temp!=nums[i]){
                count++;
            }
            temp = nums[i];
        }
        System.out.println(count);
        int[] newArr = new int[5];
        int index = 0;
        temp = nums[0];
        newArr[index++] = temp;
        for(int i = 0;i<nums.length;i++){
            if(temp!=nums[i]){
                newArr[index++]=nums[i];
            }
            temp = nums[i];
        }
        for(int i = 0;i<newArr.length;i++){
            System.out.print(newArr[i]+"\t");
        }
    }
}

7、 【编程题】输出杨辉三角(选做)
杨辉三角如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
……
杨辉三角的特点:
第i 行有i 个元素
每一行的第一个元素和最后一个元素都为1
除了1 之外,每个元素的值,都等于上一行同位置的元素以及前一个元素的和。

例如:
1 4 6 4 1 的下一行
1 a1 a2 a3 a4 1

  • a1 = 4 + 1 = 5
  • a2 = 6 + 4 = 10
  • a3 = 4 + 6 = 10
  • a4 = 1 + 4 = 5

依次类推。
要求:读入一个整数n,输出杨辉三角的前n 行
您的回答:

import java.util.*;
public class Test13 {	 
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int rows = sc.nextInt();
		for (int i = 0; i < rows; i++) {
			int number = 1;
			// 打印空格字符串
			//System.out.format("%" + (rows - i) * 2 + "s", "");
			for (int j = 0; j <= i; j++) {
				System.out.format("%4d",number);
				number = number * (i - j) / (j + 1);
			}
			System.out.println();
		}
	}
}

方法二:

import java.util.Scanner;
//杨辉三角
public class Test16 {
	    public static void main(String[] args) {
	        Scanner scanner = new Scanner(System.in);
	        int n = scanner.nextInt();
	        int[][] arr = new int[n][];
	        for(int i = 0;i<arr.length;i++){
	            arr[i] = new int[i+1];
	            for(int j = 0;j<arr[i].length;j++){
	                if(j==0||j==arr[i].length-1){
	                    arr[i][j] = 1;
	                }else{
	                    arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
	                }
	            }
	        }
	        for(int i = 0;i<arr.length;i++){
	            for(int j = 0;j<arr[i].length;j++){
	                System.out.print(arr[i][j]+"\t");
	            }
	            System.out.println();
	        }
	    }
	}

8、 【编程题】盛水最多容器(选做) image.png
示例 1:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
示例 2:
输入:height = [1,1]
输出:1
示例 3:
输入:height = [4,3,2,1,4]
输出:16
示例 4:
输入:height = [1,2,1]
输出:2


public class Water {
    public static void main(String[] args) {
        int[] arr = {1,8,6,2,5,4,8,3,7};
        int max = 0;
        int v = 0;
        for(int i = 0;i<arr.length-1;i++){
            for(int j = i+1;j<arr.length;j++){
                if(arr[i]<arr[j]){
                    v = arr[i]*(j-i);
                }else{
                    v = arr[j]*(j-i);
                }
                if(v>max){
                    max = v;
                }
            }
        }
        System.out.println(max);
    }
}

笔记
数组工具的使用 Arrays
提供了对数组进行查找、拷贝、排序、比较等功能。

  1. 排序: sort
Arrays.sort(numbers);
  1. 查找:binarySearch 使用折半查找法 ,一定是在一个有序的数组上进行折半查找。功能的结果是一个int值,如果是大于等于0,则数组中有查找的值,如果小于0,没有查找的值
int[] numbers = {3,5,9,4,7,6,1};
Arrays.sort(numbers); //数组中是否有5 
int i = Arrays.binarySearch(numbers,18); 
System.out.println(i);

3.拷贝:copyOf / copyOfRange

int[] numbers = {3,5,9,4,7,6,1}; //复制到一个新数组中 
int[] newArr = Arrays.copyOf(numbers,10); 
for(int i = 0;i<newArr.length;i++)
{ System.out.print(newArr[i]+"\t"); }

copyOf只能从新数组的0位置开始复制,而要指定位置,可以使用copyOfRange, 指定的是源数组的范围;可以使用System.arraycopy 指定目标数组的复制范围

int[] numbers = {3,5,9,4,7,6,1}; 
//复制到一个新数组中 ,原数组的复制范围 
//int[] newArr = Arrays.copyOfRange(numbers,1,3); 
//指定目标数组的复制范围 
int[] newArr = new int[10]; 
System.arraycopy(numbers,0,newArr,3,numbers.length); 
for(int i = 0;i<newArr.length;i++)
{ System.out.print(newArr[i]+"\t"); }
  1. 比较:equals , 比较两个数组相同位置的元素 是否都相同
int i = 10; 
int j = 10; 
int[] numbers = {3,5,9,4,7,6,1}; 
int[] numbers2 = {3,5,9,4,7,6,1}; 
System.out.println(Arrays.equals(numbers,numbers2)); //true 
System.out.println(numbers==numbers2); //false
  1. 填充:fill
public static void main(String[] args) {
 int[] numbers = {3,5,9,4,7,6,1};
  Arrays.fill(numbers,0); 
  for(int i = 0;i<numbers.length;i++)
  { System.out.print(numbers[i]+"\t"); } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值