前言
本篇讲解了一些数组相关题目(主要以代码的形式呈现),主要目的在于巩固数组相关知识。
上一篇 数组 讲解了一维数组和二维数组的基础知识~
欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
题1:实现toString的功能
将数组元素以字符串的形式输出在屏幕上
思路
首先要判断空指针和空数组的情况,利用字符串拼接实现toString功能
//实现自己的数组转成字符串 public static String myToString(int[] array){ //判断空指针情况 (没有指向对象) if(array==null){ return null; } //判断空数组情况 (指向的对象为空) if(array.length==0){ return "[]"; } String ret="["; for (int i = 0; i < array.length; i++) { ret=ret+array[i]; if(i!= array.length-1){ ret=ret+" ,";//字符串拼接 } } ret+="]"; return ret; }
题2:查找数组中的元素
顺序查找
如果数组比较大,效率低
public static int checkNum(int[]array,int key){ for (int i = 0; i < array.length; i++) { if(array[i]==key){ return i; } } return -1; }
二分查找
效率高,前题是建立在当前数组是有序的
//二分查找 public static int zheBanFind(int[]array,int key){ int right=0; int left= array.length-1; while(right<=left){ //int mid=(right+left)/2; //int mid=(left+(left-righ)/2);//防止越界 int mid=(right+left)>>>1;//右移一位,相当于除法 if(array[mid]<key){ right=mid+1; } if(array[mid]>key){ left=mid-1; } if(array[mid]==key){ return mid; } } return -1; }
题3:冒泡排序
//java实现冒泡排序 public static void BubbleSort(int[]array){ boolean flag=true; for (int i = 0; i < array.length-1; i++) { //第一趟 for (int j = 0; j < array.length-1-i; j++) {//减i表示每一趟都比上一趟少一次 if(array[j]>array[j+1]){ int tmp=array[j]; array[j]=array[j+1]; array[j+1]=tmp; flag=false; } } if(flag==true){ break; } } }
题4:数组的逆置
//数组的逆置 public static void reverse(int[]array){ int left=0; int right= array.length-1; while(left<right){ int tmp=array[left]; array[left]=array[right]; array[right]=tmp; left++; right--; } }
题5:数组的拷贝
将数组重新拷贝一份,当然java中自带了拷贝方法copyOf(既可以拷贝,又可以扩容)
} //数组的拷贝 public static int[] copy1(int[]array){ int[]tmp=new int[array.length]; for (int i = 0; i < array.length; i++) { tmp[i]=array[i]; } return tmp; }
public static void main(String[] args) { int[]array={9,8,7,6,5,4,3,2}; //Java里自带的拷贝 /** * 可以看作是扩容 */ int[] cp=Arrays.copyOf(array,array.length*2); System.out.println(Arrays.toString(cp)); //数组填充 可以局部填充 int[] array4=new int[10]; Arrays.fill(array4,1,6,666);//在数组array4中的【1,6)的位置填充666 System.out.println(Arrays.toString(array4)); }
题6:奇前偶后
将数组中奇数放在前面,偶数放在后面
public static void fun3(int[] array) { int left = 0; int right = array.length - 1; while (left < right) { while (left < right && array[left] % 2 != 0) {//left<right防止越界 //奇数 left++; } while (left < right && array[right] % 2 == 0) {//left<right防止越界 //偶数 right--; } int tmp = array[left]; array[left] = array[right]; array[right] = tmp; } } public static void main(String[] args){ int[] array = {1, 2, 3, 5, 6, 7}; fun3(array); System.out.println(Arrays.toString(array)); }
题7:找加数
在数组{2,7,11,15}中找两个数相加的值为13,返回【2,11】
public static int[]fun4(int[]array,int target){ int[]ret={-1,-1};//没找到就直接返回-1 for (int i = 0; i < array.length; i++) { for (int j = 0; j < array.length; j++) { if(array[i]+array[j]==target){ ret[0]=array[i]; ret[1]=array[j]; } } } return ret; } public static void main(String[] args) { int[]array={2,7,11,15}; int[]ret=fun4(array,4); System.out.println(Arrays.toString(ret)); }
题8:判断是否有连续三个奇数
判断一个数组中是否存在连续3个奇数
public static boolean fun8(int[]array){ int count=0; for (int i = 0; i < array.length; i++) { if(array[i]%2!=0){ count++; if(count==3){ return true; } } else{ count=0; } } return false; } public static void main(String[] args) { int[]array={1,2,3,0,7,9,6}; System.out.println(fun8(array)); }