第一题
计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right
实现 NumArray 类:
NumArray(int[] nums) 使用数组 nums 初始化对象
int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + nums[left + 1] + ... + nums[right] )
代码:
public class NumArray {
static //前缀和数组
int[] arr;
//输入一个数组,构成前缀和数组
public NumArray(int[] nums) {
//判断数组是否为空
if(nums==null||nums.length==0){
return;
}
//定义数组长度
arr=new int[nums.length+1];
arr[0]=nums[0];
for(int i=1;i<nums.length;i++){
arr[i]=nums[i];
}
}
public int sumRange(int left,int right) {
int n=0;
for(int i=left;i<=right;i++) {
n+= arr[i];
}
return n;
}
public static void main(String args[]) {
NumArray num = new NumArray(new int[]{-2,0,3,-5,2,-1});
//for(int x:arr) {
//
//System.out.print(x+" ");
//}
System.out.println(num.sumRange(0, 2));
System.out.println(num.sumRange(2, 5));
System.out.println(num.sumRange(0, 5));
}
第二题
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。
子数组 定义为原数组中的一个连续子序列。
请你返回 arr 中 所有奇数长度子数组的和 。
代码:
public static void main(String[] args) {
int[] arr=new int[] {1,4,2,5,3};
int sum=0;
ArrayList<Integer> ls = new ArrayList<>();
for(int i=0;i<arr.length;i++) {
for(int j=i;j<arr.length;j++) {
ls.add(arr[j]);
if(ls.size()%2!=0) {
for (int n= 0; n < ls.size(); n++) {
sum += ls.get(n);
}
}
}
ls.clear();
}
System.out.println(sum);
}