tromu:
私はちょうど配列から最大の合計を見つけた私のプログラムを書いたが、私は立ち往生では、私は最大の和に貢献している番号を見つけることができたことにより、どのような方法があるのですか?
最大合計のルールが与えられている:いいえ、隣接する要素が合計に貢献するべきではありません。
配列内の最大合計に私のソリューション:
public class MaximumELementInARray {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String[] al = reader.nextLine().split(" ");
int[] input = Arrays.stream(al).mapToInt(Integer::parseInt).toArray();
MaximumELementInARray mm = new MaximumELementInARray();
int maxi = mm.maximumm(input);
System.out.println(maxi);
}
public int maximumm(int[] a) {
List<Integer> ex = new ArrayList<>();
List<Integer> inc = new ArrayList<>();
int incl = a[0];
int excl = 0;
int excl_new;
for (int i = 1; i < a.length; i++) {
excl_new = Math.max(incl, excl);
incl = excl + a[i];
excl = excl_new;
}
System.out.println(incl > excl ? inc : ex);
return incl > excl ? incl : excl;
}
}
今ではmaximum
機能Iが最大の合計に構成要素のすべてのインデックスを置くことができます微調整はありますか?
入力:
-1 7 8 -5 4~9 -2 3
出力:
20
**
私は20に到着したかが必要です。答えは言うべき8+9+3
**
私は最大の機能で、我々は要素が合計に貢献しているのArrayListやレコードを置くことができると信じているが、私は、実装することはできませんよ。
私は2つのArrayListをしました。
List<Integer> ex = new ArrayList<>();
List<Integer> inc = new ArrayList<>();
入力:-1 7~8 -5 4出力:12ザ合計は8 + 4で構成され
入力:3 2 1 -1出力:4合計は3 + 1で構成され
等....
ハディJ:
あなたはこのコードをたどることができます。
int toIndex = 3, fromIndex = 0;
List<Integer> result = new ArrayList<>();
while (toIndex < numbers.size()) {
Map<Integer, Integer> map = IntStream
.range(fromIndex, toIndex)
.filter(i->numbers.get(i)>0)
.mapToObj(i -> new AbstractMap.SimpleEntry<>(i, numbers.get(i)))
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey,(a,b)->b));
// find max of sublist
int maxOfSub = numbers.subList(fromIndex, toIndex).stream().max(Integer::compareTo).get();
//update indexes
fromIndex = map.getOrDefault(maxOfSub,toIndex-1) + 2;
toIndex += fromIndex;
if (maxOfSub > 0)
result.add(maxOfSub);
}
int lastMax = numbers.subList(fromIndex, numbers.size()).stream().max(Integer::compareTo).get();
if (lastMax > 0)
result.add(lastMax);
System.out.println(result);
System.out.println(result.stream().reduce(0, Integer::sum));