62,633
社区成员




static String rightOffset(String src, int offset) {
char[] arr = src.toCharArray();
reserver(arr, 0, offset);
reserver(arr, offset, arr.length);
reserver(arr, 0, arr.length);
return String.valueOf(arr);
}
public class Test03 {
public static void main(String[] args) {
String value = "abcdefgh";
System.out.println(rightOffset(value, 4));
}
static String rightOffset(String src, int offset) {
char[] arr = src.toCharArray();
reserver(arr, 0, 4);
reserver(arr, 4, arr.length);
reserver(arr, 0, arr.length);
return String.valueOf(arr);
}
private static char[] reserver(char[] arr, int start, int end) {
for(int i = 0;i < (end - start) / 2;++i) {
char temp = arr[start + i];
arr[start + i] = arr[end - i - 1];
arr[end - i - 1] = temp;
}
return arr;
}
}
import java.util.Scanner;
public class PlusArr2 {
public static void main(String[] args) {
// double[] srcArr = { 0.1, 10, 20, 2, 0.1, 0.7, -0.4, 0.1, -0.8 };
System.out.println("input numbers :");
Scanner r = new Scanner(System.in);
String input = r.nextLine();
String[] strSplit = input.split(",");
int len = strSplit.length;
double[] srcArr = new double[len];
for (int i = 0; i < strSplit.length; i++) {
srcArr[i] = Double.parseDouble(strSplit[i]);
}
/************************/
double[] maxArr = new double[len];
double[] minArr = new double[len];
double maxValue = srcArr[0];
maxArr[0] = srcArr[0];
minArr[0] = srcArr[0];
int startIndex = 0;
int endIndex = 0;
for (int i = 1; i < len; i++) {
maxArr[i] = Math.max(
Math.max(srcArr[i], maxArr[i - 1] * srcArr[i]),
minArr[i - 1] * srcArr[i]);
minArr[i] = Math.min(
Math.min(srcArr[i], maxArr[i - 1] * srcArr[i]),
minArr[i - 1] * srcArr[i]);
maxValue = Math.max(maxValue, maxArr[i]);
maxValue = Math.max(maxValue, maxArr[i]);
if (maxValue <= maxArr[i]) {
endIndex = i;
double s1 = maxArr[i - 1] * srcArr[i];
if (srcArr[i] > s1) {
startIndex = i;
}
}
}
System.out.println("startIndex:"+startIndex);
System.out.println("endIndex :"+ endIndex);
System.out.println("maxValue = " + maxValue);
for(int i=startIndex;i<=endIndex;i++){
System.out.print(srcArr[i]+" * ");
}
}
}
下面是网上的思想
假设数组为a[],直接利用动态归化来求解,考虑到可能存在负数的情况,我们用Max来表示以a结尾的最大连续子串的乘积值,用Min表示以a结尾的最小的子串的乘积值,那么状态转移方程为:
Max=max{a, Max[i-1]*a, Min[i-1]*a};
Min=min{a, Max[i-1]*a, Min[i-1]*a};
初始状态为Max[1]=Min[1]=a[1]。代码如下:
double func(double *a,const int n) {
double *maxA = new double[n];
double *minA = new double[n];
maxA[0] = minA[0] =a[0];
double value = maxA[0];
for(int i = 1 ; i < n ; ++i) {
maxA[i] = max(max(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);
minA[i] = min(min(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);
value=max(value,maxA[i]);
}
return value;
}