前言
本篇讲解了一些数组相关题目(主要以代码的形式呈现),主要目的在于巩固数组相关知识。
上一篇 数组 讲解了一维数组和二维数组的基础知识~
欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
题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));
}