n
및 n
양의 정수 배열을 사용하면 삼각형을 만들 수없는 세 개의 숫자를 선택할 수있는 방법의 수를 필요로합니다.삼각형을 만들 수없는 방법의 수는 얼마입니까?
예 :
3
4 2 10
답 : (JAVA
에서)
1
내 접근
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);
내 알고리즘 :
목록을 정렬 한 후 나는 그럴 생각합니다 모든 숫자가 arr[i]
이되도록 arr[i]>=arr[j]+arr[k]
과 같은 삼각형이 나타나지 않는 경우, ying을 클릭하십시오.
그러나이 솔루션의 경우 timed-out
이 표시됩니다. 누구든지이 문제에 대한 더 나은 접근법을 제안 할 수 있습니까?
I.. 난 당신이 약간의 정교한 수도 있습니다 그래서 당신이 while 루프에서 두 번째 조건을 필요로하지 않는 알고리즘을 이해하고 있는지 모르겠습니다. if (condition) {} else if (! condition) – Thomas
예 .... 더 나은 이해를 위해 ..... if (condition) {} else if (! condition') ..... – yobro97
힌트 : {if (condition) {} n, arr, count 등의 의미있는 이름을 사용한다면 ... 알고리즘이 어떻게 동작해야하는지에 대한 설명; 어쩌면 다른 사람들은 당신이하고있는 것을 이해할 것입니다. 또는 적어도, 그들은 기회를 가질 것입니다. 여러분이 보았을 때, 코드에 대한 아이디어는 다음과 같습니다. 따라서 읽기 쉽고 이해하기 쉬운 코드 작성에 정말로 정말로 집중하고 싶습니다. – GhostCat