目录
3. 定义一个数组,用来存储1 1 2 3 5 8 13……这样的Fibonacci数列,存储该数列的前20个数;
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
移动之后的数据应该如下: a={5,6,8,6,1,56,0,0,0};
10.利用二分法查找数组中的数据的位置,如果不存在,输出-1
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));
}
}