练习(数组)

写在前面:
1、比较容易的题,但是我菜,写了挺久。
2、勉强做出来,尤其是第2题,代码有点冗余,不简洁。
3、收获还是很大的!!!
面向API学习!!!
面向源码学习!!!
面向百度学习!!!

4、写一篇文章展示下java.util.Arraysjava.lang.String

题目1

41. 编程题:给你一个整数数组nums,请你返回其中位数为偶数的数字的个数。
比如,对于数组nums = [12,345,2,6,7896]
12 是 2 位数字(位数为偶数),345 是 3 位数字(位数为奇数),2 是 1 位数字(位数为奇数),
6 是 1 位数字 位数为奇数),7896 是 4 位数字(位数为偶数)

因此只有 12 和 7896 是位数为偶数的数字,结果为2。注意,其中1 <= nums[i] <= 10^5。

题目2

42.编程题:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),
并返回该子数组所对应的乘积。
例如,输入的数字为:[2,3,-2,4],结果是6,子数组 [2,3] 有最大乘积 6
[-2,0,-1]结果是0,结果不能为 2, 因为 [-2,-1] 不是子数组。

实现1

package src.ExamTest;

/**
 * @AUTHOR ZHANG
 * @data 2021/2/28 16:33
 */
public class Demo1 {
    
    
    public static void main(String[] args) {
    
    
        int[] nums = {
    
    12, 345, 2, 6, 7896, 90};
        System.out.println(evenCount1(nums));
        System.out.println(evenCount2(nums));
    }

    //数组中的每一个值转换为字符串,字符串的长度即数组的位数
    public static int evenCount1(int[] nums) {
    
    
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
    
    
            //static String valueOf(char[] data)
            //返回 char 数组参数的字符串表示形式
            String a = String.valueOf(nums[i]);
            if (a.length() % 2 == 0) {
    
    
//            if (String.valueOf(nums[i]).length() % 2 == 0) {
    
    
                count++;
            }
        }
        return count;
    }

    //范围在[10,99]和[1000,9999]范围内的数的位数都是偶数
    public static int evenCount2(int[] nums) {
    
    
        int count2 = 0;
        for (int i = 0; i < nums.length; i++) {
    
    
            if ((nums[i] >= 10 && nums[i] <= 99) || (nums[i] >= 1000 && nums[i] <= 9999)) {
    
    
                count2++;
            }
        }
        return count2;
    }

}

实现2

package src.ExamTest;

import java.util.Arrays;

/**
 * @AUTHOR ZHANG
 * @data 2021/2/28 17:35
 */

public class Deom2 {
    
    
    public static void main(String[] args) {
    
    
        int[] nums = {
    
    2, 3, -2, 4, 9};
        System.out.println(Arrays.toString(nums));
        //同Arrays.toString(nums)
        /*System.out.print("[");
        for (int i = 0; i < nums.length; i++) {
            if (i == nums.length - 1) {
                System.out.print(nums[i] + "]");
            } else {
                System.out.print(nums[i] + ", ");
            }
        }
        System.out.println();*/

        /*for (int i : nums){
            System.out.println(i);
        }*/

        //System.out.println(returnArrays(nums));
//        System.out.println("乘积最大的连续子数组是:");
        System.out.println("最大的乘积是:" + returnArrays(nums));
    }

    //{2, 3, -2, 4}
    public static int returnArrays(int[] nums) {
    
    
        int num1 = 1;
        int targeti = 0;
        int count = 1;

        for (int i = 0; i < nums.length; i++) {
    
    
            int count1 = 1;
            int targeti1 = 0;
            //{2, 3, -2, 4, 9}
            int num = 1;//记录i = 0、1、2、3、4时的乘积
            //i等于0时,j从0到4,num = 6;
            //i等于1时,j从1到3,num = 3;
            for (int j = i; j < nums.length; j++) {
    
    
                int temp = 0;
                temp = num * nums[j];
                System.out.println(temp > num);
                if (temp > num) {
    
    
                    num = temp;
                    targeti1 = i;
                } else {
    
    
                    break;
                }
            }
            System.out.println("数组下标为" + i + "时,最大值为" + num);
            System.out.println(targeti1);

            if (num > num1) {
    
    
                targeti = targeti1;
                System.out.println("targeti1的值为:" + targeti1);
                num1 = num;
                count = count1;
            }
        }
        //测试内容:
        System.out.println("targeti的值为:" + targeti);
        System.out.println("count的值为:" + count);

        System.out.print("乘积最大的连续子数组是:[");
        for (int i = targeti; i <= targeti + count; i++) {
    
    
            if (i == targeti + count) {
    
    
                System.out.print(nums[i] + "]");
            } else {
    
    
                System.out.print(nums[i] + ", ");
            }

        }
        System.out.println();
        return num1;

    }

}

总结和思考
1、String API

在这里插入图片描述
构造方法

String(byte[] bytes) 
          通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

普通方法

int length() 
          返回此字符串的长度 

char charAt(int index) 
          返回指定索引处的 charstatic String valueOf(char[] data) 
          返回 char 数组参数的字符串表示形式 

byte[] getBytes() 
          使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
char[] toCharArray() 
          将此字符串转换为一个新的字符数组 
          
int indexOf(int ch) 
          返回指定字符在此字符串中第一次出现处的索引 
           
String substring(int beginIndex, int endIndex) 
          返回一个新字符串,它是此字符串的一个子字符串 

2、Arrays API

在这里插入图片描述

成员方法

static int[] copyOfRange(int[] original, int from, int to) 
          将指定数组的指定范围复制到一个新数组 

static void sort(int[] a) 
          对指定的 int 型数组按数字升序进行排序 

static String toString(int[] a) 
          返回指定数组内容的字符串表示形式 

猜你喜欢

转载自blog.csdn.net/AC_872767407/article/details/114230338
今日推荐