You have n boxes. You are given a binary string boxes of length n, where boxes[i] is '0' if the ith box is empty, and '1' if it contains one ball.
In one operation, you can move one ball from a box to an adjacent box.
Box i is adjacent to box j if abs(i - j) == 1. Note that after doing so, there may be more than one ball in some boxes.
Return an array answer of size n, where answer[i] is the minimum number of operations needed to move all the balls to the ith box.
Each answer[i] is calculated considering the initial state of the boxes.
Example 1:
Input:
boxes = "110"
Output: [1,1,3]
Explanation:
The answer for each box is as follows:
1) First box: you will have to move one ball from the second box to the first box in one operation.
2) Second box: you will have to move one ball from the first box to the second box in one operation.
3) Third box: you will have to move one ball from the first box to the third box in two operations, and move one ball from the second box to the third box in one operation.
Example 2:
Input: boxes = "001011" Output: [11,8,5,4,3,4]
Constraints:
- n == boxes.length
- 1 <= n <= 2000
- boxes[i] is either '0' or '1'.
boxes배열은 0과 1로써 공의 유무를 나타낸다
boxes[idx] 자리에 boxes에서 존재하는 모든 공을 옮긴다 (without idx)
이를 끝까지 반복하여 해당 배열을 반환한다.
무지성 1차시도
class Solution {
public int[] minOperations(String boxes) {
/*
boxes배열은 0과 1로써 공의 유무를 나타낸다
boxes[idx] 자리에 boxes에서 존재하는 모든 공을 옮긴다 (without idx)
이를 끝까지 반복하여 해당 배열을 반환한다.
*/
// step1 -> change boxes to int arr
int[] digits = new int[boxes.length()];
for(int i=0; i<boxes.length(); i++) digits[i] = boxes.charAt(i) - '0';
// step1 -> get all balls and add ArrayList
ArrayList<Integer> balls = new ArrayList<Integer>();
for(int idx = 0; idx < digits.length; idx++) {
if(digits[idx] != 0){
balls.add(idx);
}
}
for(int temp : balls){
System.out.println(temp);
}
// step2
for(int idx = 0; idx < digits.length; idx++) {
int distance = 0;
for(int temp : balls){
distance += Math.abs(idx - temp);
}
digits[idx] = distance;
}
return digits;
}
}
Runtime: 200 ms, faster than 23.96% of Java online submissions for Minimum Number of Operations to Move All Balls to Each Box.
Memory Usage: 39.7 MB, less than 40.15% of Java online submissions for Minimum Number of Operations to Move All Balls to Each Box.
200ms 처음본다
어떻게 해야 시간을 줄일 수 있을까?
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode] - How Many Numbers Are Smaller Than the Current Number (0) | 2021.07.21 |
---|---|
[LeetCode] Max Consecutive Ones (0) | 2021.07.07 |
[LeetCode] Jewels and Stones (0) | 2021.06.18 |
[LeetCode] Kids With the Greatest Number of Candies (0) | 2021.06.16 |
[LeetCode] Number of Good Pairs (0) | 2021.06.16 |