写在前面:
1、比较容易的题,但是我菜,写了挺久。
2、勉强做出来,尤其是第2题,代码有点冗余,不简洁。
3、收获还是很大的!!!
面向API学习!!!
面向源码学习!!!
面向百度学习!!!
4、写一篇文章展示下java.util.Arrays和java.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)
返回指定索引处的 char 值
static 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)
返回指定数组内容的字符串表示形式