일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 생명주기
- Fragment에서 Activity의 함수 사용하기
- 안드로이드
- 코틀린
- Error:Execution failed for task ':app:mergeDebugResources'
- 리사이클러뷰
- 테마 아이콘
- 재사용
- 안드로이드13
- ActivityTestRule
- 고차함수
- IntentTestRule
- Android
- 뷰변경 감지
- 구분선
- binding adapter
- Fragment 수동 추가
- recyclerview
- 안드로이드개발레벨업교과서
- 스와이프
- adapter
- ui test
- 안드로이드스튜디오
- viewholder
- high order function
- LayoutManger
- espresso
- fragment
- 코딜리티
- searchview
- Today
- Total
룬아님의 취중코딩
Codility 26번 MaxDoubleSliceSum 본문
MaxDoubleSliceSum
A non-empty array A consisting of N integers is given.
A triplet (X, Y, Z), such that 0 ≤ X < Y < Z < N, is called a double slice.
The sum of double slice (X, Y, Z) is the total of A[X + 1] + A[X + 2] + ... + A[Y − 1] + A[Y + 1] + A[Y + 2] + ... + A[Z − 1].
For example, array A such that:
A[0] = 3 A[1] = 2 A[2] = 6 A[3] = -1 A[4] = 4 A[5] = 5 A[6] = -1 A[7] = 2
contains the following example double slices:
- double slice (0, 3, 6), sum is 2 + 6 + 4 + 5 = 17,
- double slice (0, 3, 7), sum is 2 + 6 + 4 + 5 − 1 = 16,
- double slice (3, 4, 5), sum is 0.
The goal is to find the maximal sum of any double slice.
Write a function:
class Solution { public int solution(int[] A); }
that, given a non-empty array A consisting of N integers, returns the maximal sum of any double slice.
For example, given:
A[0] = 3 A[1] = 2 A[2] = 6 A[3] = -1 A[4] = 4 A[5] = 5 A[6] = -1 A[7] = 2
the function should return 17, because no double slice of array A has a sum of greater than 17.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [3..100,000];
- each element of array A is an integer within the range [−10,000..10,000].
class Solution {
public int solution(int[] A) {
if(A.length == 1) return A[0];
int localMaxSum = A[1];
int globalMaxSum = A[1];
int maxpos = 1;
int minpos = 1;
for(int i = 2 ; i < A.length - 1; i++) {
localMaxSum = Math.max(A[i], localMaxSum + A[i]);
if(globalMaxSum <= localMaxSum){
globalMaxSum = localMaxSum;
maxpos = i;
}
}
int temp = globalMaxSum;
int min =A[maxpos];
for(int i = maxpos; i >= 1; i--){
if(min > A[i]){
min = A[i];
}
temp -= A[i];
if(temp == 0){
minpos = i;
break;
}
}
if(min > 0 && (maxpos <= A.length-3 || minpos >=2)){
return globalMaxSum;
}
//System.out.println(maxpos);
//System.out.println(min);
return globalMaxSum - min;
}
}
'개발 > 알고리즘' 카테고리의 다른 글
Codility 29번 Peaks (0) | 2019.09.30 |
---|---|
Codility 28번 MinPerimeterRectangle (0) | 2019.09.30 |
Codility 27번 CountFactors (0) | 2019.09.23 |
Codility 25번 MaxSliceSum (0) | 2019.09.22 |
Codility 23번 EquiLeader (0) | 2019.09.17 |