Инициализация j
до i+1
пропустит избыточные сравнения.
for(int i = 0; i < pt.length; i++) {
for(int j = i + 1; j < pt.length; j++) {
if(pt[i] != pt[j]) { /* do stuff */ }
}
}
(Кстати, изменил оператор if, предполагая, что вы хотите использовать i
и j
в качестве индексов в массиве.)
Это лучшее из того, что вы можете получить для самого простого случая, когда вам нужно получить перекрестное произведение массива с самим собой, за вычетом всех элементов {x, y} | x == y
. (то есть исчерпывающий список неупорядоченных пар различных элементов.) Если вам нужны упорядоченные пары различных элементов, тогда ваш код лучше.