面试经典算法题(2)
题目:给定一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组
package javaoffer;
/*给定一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组*/
public class Demo02 {
static int[] arr = {1, 2, 2, 3, 4, 5, 6, 7, 8, 9}; //排好序的数组
static int num = 15; //一个数
static String str = ""; //用来拼接index
static boolean flag = false;
static int count = 0;//记录子数组的个数
public static void main(String[] args) {
int a = 0; //原数组的索引开始值
fun(a); //调用方法
}
public static void fun(int a) {
int sum = 0; //用来待会和给定的num作比较
for (int i = a; i < arr.length; i++) {
str += i; //索引留存
sum += arr[i];//累加用于比较
if (sum == num) {//满足条件
count++;
int[] arr2 = new int[str.length()];//子数组
for (int k = 0; k < arr2.length; k++) {//将下标索引转换成int型索引
arr2[k] = arr[str.charAt(k) - 48];//注意char型的“1”和int型“1”的转换(涉及ASKII码表)
}
System.out.print("子数组" + count + "中的元素:");
for (int j = 0; j < arr2.length; j++) {//遍历输出子数组的内容
System.out.print(arr2[j] + ",");
}
System.out.println();
flag = true;
break;
}
if (sum > num) {
break;
}
}
if (flag == false || flag == true && a != arr.length - 1) {//考虑存在多个子数组满足条件的情况
str = "";
a += 1;
fun(a);
}
}
}