일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- searchview
- 코딜리티
- 스와이프
- recyclerview
- 안드로이드13
- high order function
- adapter
- Fragment에서 Activity의 함수 사용하기
- binding adapter
- IntentTestRule
- 리사이클러뷰
- 뷰변경 감지
- fragment
- ActivityTestRule
- Error:Execution failed for task ':app:mergeDebugResources'
- 안드로이드개발레벨업교과서
- 안드로이드
- Fragment 수동 추가
- espresso
- 재사용
- 고차함수
- 코틀린
- 테마 아이콘
- 생명주기
- Android
- LayoutManger
- 안드로이드스튜디오
- 구분선
- ui test
- viewholder
- Today
- Total
룬아님의 취중코딩
Codility 25번 MaxSliceSum 본문
MaxSliceSum
A non-empty array A consisting of N integers is given. A pair of integers (P, Q), such that 0 ≤ P ≤ Q < N, is called a slice of array A. The sum of a slice (P, Q) is the total of A[P] + A[P+1] + ... + A[Q].
Write a function:
class Solution { public int solution(int[] A); }
that, given an array A consisting of N integers, returns the maximum sum of any slice of A.
For example, given array A such that:
A[0] = 3 A[1] = 2 A[2] = -6 A[3] = 4 A[4] = 0
the function should return 5 because:
- (3, 4) is a slice of A that has sum 4,
- (2, 2) is a slice of A that has sum −6,
- (0, 1) is a slice of A that has sum 5,
- no other slice of A has sum greater than (0, 1).
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..1,000,000];
- each element of array A is an integer within the range [−1,000,000..1,000,000];
- the result will be an integer within the range [−2,147,483,648..2,147,483,647].
Copyright 2009–2019 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.
최대값으로 slice하는 문제는 dynamic programming의 하나인 Kadane’s Algorithm (카데인 알고리즘)으로 O(n)으로 해결할 수 있다.
https://sustainable-dev.tistory.com/23?category=809125
class Solution {
public int solution(int[] A) {
if(A.length == 1) return A[0];
int localMaxSum = A[0];
int globalMaxSum = A[0];
for(int i = 1 ; i < A.length; i++) {
localMaxSum = Math.max(A[i], localMaxSum + A[i]);
globalMaxSum = Math.max(globalMaxSum, localMaxSum);
}
return globalMaxSum;
}
}
'개발 > 알고리즘' 카테고리의 다른 글
Codility 26번 MaxDoubleSliceSum (0) | 2019.09.25 |
---|---|
Codility 27번 CountFactors (0) | 2019.09.23 |
Codility 23번 EquiLeader (0) | 2019.09.17 |
Codility 24번 MaxProfit (0) | 2019.09.15 |
Codility 22번 Dominator (0) | 2019.09.15 |