【编程题】
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
提供了对数组进行查找、拷贝、排序、比较等功能。
- 排序: sort
Arrays.sort(numbers);
- 查找: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"); }
- 比较: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
- 填充: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"); } }