LeetCode-[수조]-유효 삼각형 의 개수
예시 1:
: [2,2,3,4]
: 3
:
:
2,3,4 ( 2)
2,3,4 ( 2)
2,2,3
주의:
4.567917.배열 의 길 이 는 1000 을 초과 하지 않 는 다
4.567917.배열 안의 정수 범 위 는[0,1000]이다
문제 풀이:삼각형 을 구성 하려 면 삼각형 중 두 개의 가장 짧 은 변 의 합 이 가장 긴 변 보다 크 면 된다. 이러한 원 리 를 바탕 으로 우 리 는 먼저 배열 을 작은 것 부터 큰 것 까지 정렬 할 수 있다.배열 을 정렬 한 후에 우 리 는 이렇게 생각 하고 특정한 수 를 고정 시 킨 다음 에 좌우 두 개의 지침 으로 각각 특정한 수 를 가리 킬 수 있다.좌우 지침 이 가리 키 는 숫자의 합 이 우리 가 고정 한 수 보다 크 면 이런 상황 이 성립 된다 는 것 을 설명 할 수 있다.그리고 오른쪽 바늘 을 왼쪽으로 한 명 이동 시 켜 만족 하지 않 을 때 까지 계속 판단 하고 왼쪽 바늘 을 오른쪽으로 한 명 이동 시 켜 계속 판단 한다.왼쪽 바늘 이 오른쪽 바늘 과 겹 칠 때 까지.이 사고 에 따라 우 리 는 배열 을 큰 것 에서 작은 것 으로 옮 겨 다 니 며 현재 옮 겨 다 니 는 숫자 nums[i]를 고정 시 키 고 왼쪽 포인터 가 0 번 째 숫자 nums[0]를 가리 키 며 오른쪽 포인터 가 이 수의 왼쪽 숫자 nums[i-1]를 가리 키 도록 합 니 다.nums[left]+nums[right]>nums[i]를 사용 할 때 오른쪽 포인터 right 를 고정 시 키 면 왼쪽 포인터 left 가 오른쪽 으로 지나 갈 때 왼쪽 포인터 와 오른쪽 포인터 사이 의 것 도 요 구 를 만족 시 킬 것 이 라 고 생각 할 수 있 습 니 다.그래서 count+=(right-left)이 있 습 니 다. 오른쪽 포인터 right 를 왼쪽으로 한 자 리 를 옮 겨 판단 을 계속 하고 성립 되면 right 는 앞에서 조작 을 계속 반복 합 니 다.만약 성립 되 지 않 는 다 면 두 수의 합 이 너무 작 다 는 것 을 설명 합 니 다.이때 왼쪽 포인터 left 를 오른쪽으로 한 자 리 를 옮 기 고 판단 을 계속 합 니 다.left 와 right 포인터 가 겹 칠 때 까지 nums[i]의 모든 상황 을 고려 했 습 니 다.마지막 에 배열 이 다 옮 겨 다 니 고 결과 가 나 왔 습 니 다.
class Solution {
public int triangleNumber(int[] nums) {
int n=nums.length;
int res=0;
Arrays.sort(nums);
for(int i=n-1;i>=2;i--){
int l=0,r=i-1;
while(lnums[i]){
res+=(r-l);
r--;
}else{
l++;
}
}
}
return res;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.