【JavaSE】java刷题--数组练习

前言

本篇讲解了一些数组相关题目(主要以代码的形式呈现),主要目的在于巩固数组相关知识。

上一篇数组 讲解了一维数组和二维数组的基础知识~

欢迎关注个人主页:逸狼

创造不易,可以点点赞吗~

如有错误,欢迎指出~

题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));
    }
相关推荐
数据小爬虫@1 分钟前
如何利用java爬虫获得淘宝商品评论
java·开发语言·爬虫
喜欢猪猪2 分钟前
面试题---深入源码理解MQ长轮询优化机制
java
qq_172805599 分钟前
RUST学习教程-安装教程
开发语言·学习·rust·安装
天才在此12 分钟前
汽车加油行驶问题-动态规划算法(已在洛谷AC)
算法·动态规划
wjs202416 分钟前
MongoDB 更新集合名
开发语言
monkey_meng19 分钟前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust
草莓base32 分钟前
【手写一个spring】spring源码的简单实现--bean对象的创建
java·spring·rpc
legend_jz44 分钟前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
drebander1 小时前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
乌啼霜满天2491 小时前
Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
java·spring boot·spring·mvc