Дано n
и массив из n
положительных целых чисел, количество способов выбрать три числа, чтобы они не могли образовать треугольник.Количество способов сделать треугольник невозможно?
Пример:
3
4 2 10
Ответ:
1
Мой подход (в JAVA
)
int[] arr = new int[n];//list of the numbers given
int count=0;//count of all such triplets
for(int i=0;i<n;i++)
arr[i]=sc.nextInt();
Arrays.sort(arr);
for(int i=n-1;i>=0;i--)
{
int j=0;
int k= i-1;
while(j<k && k>=0)
{
if(arr[i]>=arr[j]+arr[k])//condition for no triangle formation
{
count++;
j++;//checking the next possible triplet by varying the third number
}
else if(arr[i]<arr[j]+arr[k])
{
j=0;
k--;//now varying the second number if no such third number exists
}
}
}
System.out.println(count);
Мой алгоритм:
После сортировки списка я тр ying, чтобы найти все числа, меньшие, чем arr[i]
, такие, что arr[i]>=arr[j]+arr[k]
, и в этом случае треугольник не образуется.
Но для этого решения я получаю timed-out
. Может ли кто-нибудь предложить лучший подход к этой проблеме?
я.. «Не совсем уверен, что я понимаю алгоритм, который вы используете, чтобы вы могли разработать немного. Кроме того, вам не нужно второе условие во время цикла while, а не' if (condition) {} else if (! condition) {} 'just use' if (condition) {} else {} '. – Thomas
Да .... Я добавил' if (condition) {} else if (! condition', что для лучшего понимания ..... – yobro97
Подсказка: если бы вы использовали как-то значимые имена вместо n, arr, count и т. д. ... и некоторые co о том, как должен работать алгоритм; может быть, тогда другие люди поймут, что вы делаете. Или, по крайней мере, у них будет шанс ... вы видите, идея кода: это ** читать ** людьми много раз много раз чаще, чем написано. Таким образом, вы действительно хотите сосредоточиться на написании кода, который легко читать и понимать. – GhostCat