//给定一个整数数组 nums,处理以下类型的多个查询:
//计算索引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 test01 {
int [] sum ;
public test01(int [] nums){
sum = new int[nums.length+1];
sum[0] = 0;
for (int i = 1; i <= nums.length; i++) {
sum[i] += sum[i-1] + nums[i-1];
}
}
public int sumRange(int left, int right) {
return sum[right+1] - sum[left];
}
public static void main(String[] args) {
test01 ts = new test01(new int[]{1,2,3,4});
System.out.println(ts.sumRange(0,2));//6
System.out.println(ts.sumRange(1,3));//9
System.out.println(ts.sumRange(0,3));//10
}
}
import java.util.ArrayList;
//给你一个正整数数组arr,请你计算所有可能的奇数长度子数组的和。
//子数组 定义为原数组中的一个连续子序列。
//请你返回 arr中 所有奇数长度子数组的和 。
public class test02 {
public static void main(String[] args) {
int [] arr = {10,11,12};
int count = 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 k = 0; k < ls.size(); k++) {
count += ls.get(k);
}
}
}
ls.clear();
}
System.out.println(count);//
}
}
import java.util.ArrayList;
//给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。
//子数组 是数组的一段连续部分。
public class test03 {
public static void main(String[] args) {
int [] nums = {1,0,1,0,1};
int goal = 2;
int count = 0;
ArrayList<Integer> ls = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
for (int j = i; j < nums.length; j++) {
ls.add(nums[j]);
int sum = 0;
for (int k = 0; k < ls.size(); k++) {
sum += ls.get(k);
}
if (sum == goal){
count++;
}
}
ls.clear();
}
System.out.println(count);
}
}
//波利卡普急需铲子!他来到商店,挑选了一个合适的。波利卡普选择的铲子以k个伯勒斯的价格出售。假设商店中有无限数量的此类铲子。
//在他的口袋里,波利卡普有无限数量的“10-burle硬币”和一枚r-burles硬币(1 ≤ r ≤ 9)。
//Polycarp 必须购买的铲子的最低数量是多少,以便他可以在没有任何变化的情况下支付购买费用?很明显,
//他可以支付 10 铲子而无需任何变化(通过支付所需数量的 10 burle 硬币并且不使用 r burles 的硬币)。
// 但也许他可以买更少的铲子,不用找零钱就付钱。请注意,Polycarp应该至少购买一把铲子。
public class test04 {
public static void main(String[] args) {
int price = 15;
int r = 2;
for (int min_num = 1;min_num < price * 10;min_num++){
for (int shiyuan = 1; shiyuan < price; shiyuan++) {
if (shiyuan * 10 == price * min_num){
System.out.println("最少买"+min_num+"把");
return;
}
if (shiyuan * 10 > price * min_num){
if ((shiyuan-1) * 10 < price * min_num){
if ((shiyuan - 1) * 10 + r == price * min_num){
System.out.println("最少买"+min_num+"把");
return;
}
}
}
}
}
}
}