【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));
    }
相关推荐
奶香臭豆腐12 分钟前
C++ —— 模板类具体化
开发语言·c++·学习
游是水里的游18 分钟前
【算法day19】回溯:分割与子集问题
算法
不想当程序猿_18 分钟前
【蓝桥杯每日一题】分糖果——DFS
c++·算法·蓝桥杯·深度优先
晚夜微雨问海棠呀20 分钟前
长沙景区数据分析项目实现
开发语言·python·信息可视化
graceyun21 分钟前
C语言初阶习题【9】数9的个数
c语言·开发语言
hanbarger22 分钟前
mybatis框架——缓存,分页
java·spring·mybatis
cdut_suye30 分钟前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
南城花随雪。37 分钟前
单片机:实现FFT快速傅里叶变换算法(附带源码)
单片机·嵌入式硬件·算法
苹果醋342 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行43 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate