【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));
    }
相关推荐
迷途之人不知返42 分钟前
算法系列2:滑动窗口
算法
IT爱学堂43 分钟前
尚硅谷 - 2025年3月Java+AI大模型应用开发
java·开发语言·人工智能
有点。43 分钟前
C++认识数
开发语言·c++
Herbert_hwt1 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
小贤plus1 小时前
SpringBoot 三大核心注解精讲:@ControllerAdvice、@RestControllerAdvice、@Validated 分组校验(实战)
java
吠品2 小时前
Java byte数组与String互转:编码细节与踩坑记录
java·linux·服务器
W_326002 小时前
Python文件进阶:一维数据与 CSV 文件读写
开发语言·python
晚风醉蝶2 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法
Tyler_TXZ2 小时前
C++C语言之——二叉树
c语言·开发语言·数据结构·c++·二叉树
Tisfy2 小时前
LeetCode 3090.每个字符最多出现两次的最长子字符串:二重循环 / 滑动窗口
算法·leetcode·字符串·题解·模拟·双指针·滑动窗口