как перебрать растущий набор в Java

У меня есть некоторый код в C ++, в котором набор повторяется, который растет с каждым циклом.

Пример кода C ++ приведен ниже.
Как я могу написать тот же код в Java?

#include <bits/stdc++.h>
using namespace std;

#define tr(c,i) for(auto i=(c).begin(); i != (c).end(); i++)
#define rep(i,n) for(int i=0;i<(n);i++)
#define forup(i,a,b) for(int i=(a);i<=(b);i++)
#define tcsolve() int tcs; cin >> tcs; forup(tc, 1, tcs) solve();

void solve() {
int n, k, t, ans;
cin >> n >> k;
set<int> s, w;
rep (i, n) {
cin >> t;
s.insert(t);
}
ans = k;
w.insert(k);
tr(s, i) {
tr(w, j) {
int x = *i^*j;
ans = max(ans, x);
w.insert(x);
}
}
cout << ans << endl;
}

int main () {
std::ios::sync_with_stdio(false);
tcsolve();
return 0;
}

Я хочу сделать то же самое в Java

tr(w, j) {
int x = *i^*j;
ans = max(ans, x);
w.insert(x);
}

Как я могу это сделать?

Мое решение что-то вроде этого

static int findMaximum(Set<Integer> set, int k)
{
int ans = k;
Set<Integer> temp = new HashSet<>();

temp.add(k);

Iterator<Integer> iter_i = set.iterator();
Iterator<Integer> iter_j = temp.iterator();

int i,j=0;
while(iter_i.hasNext())
{
i = (int)iter_i.next();
while(iter_j.hasNext())
{
j = (int)iter_j.next();
int x = i^j;
ans = Integer.max(ans, x);
temp.add(x);
}
System.out.println("temp: " +temp);
System.out.println("i: " + i +" j: " +j);
}

return ans;

}

Но мой фактический ответ

temp: [4, 5]
i: 1 j: 4
temp: [4, 5]
i: 2 j: 4
temp: [4, 5]
i: 3 j: 4
5

в то время как в правильном решении набор должен увеличиваться с возвращаемым значением метода как 7

Пожалуйста, укажите, есть ли какая-либо другая ошибка в моей проблеме

-1

Решение

Вы не должны переопределять это. Вы можете использовать потоки Java, они уже реализовали это.

Это всего лишь пример:

Integer maxNumber = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9)
.max(Comparator.comparing(Integer::valueOf)).get();
Integer minNumber = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9)
.min(Comparator.comparing(Integer::valueOf)).get();

System.out.println("maxNumber = " + maxNumber);
System.out.println("minNumber = " + minNumber);

Чтобы создать поток из набора:

Set<Integer> s = ...
Integer max = s.stream().max(Comparator.comparing(Integer::valueOf)).get();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]