Given an binary array nums
and an integer k
, return true
if all 1
's are at least k
places away from each other, otherwise return false
.
Example 1:
Input: nums = [1,0,0,0,1,0,0,1], k = 2 Output: true Explanation: Each of the 1s are at least 2 places away from each other.
Example 2:
Input: nums = [1,0,0,1,0,1], k = 2 Output: false Explanation: The second 1 and third 1 are only one apart from each other.
Constraints:
1 <= nums.length <= 105
0 <= k <= nums.length
nums[i]
is 0
or 1
program main
! Solve the problem:
! Given an binary array `nums` and an integer `k`, return `true` if all `1`s are at least `k` places away from each other, otherwise return `false`.
implicit none
integer, parameter :: k = 2
integer, dimension(8) :: nums = [1, 0, 0, 0, 1, 0, 0, 1]
logical :: result
print '(L1)', solve(nums, k)
contains
function solve(nums, k) result(result)
implicit none
integer, dimension(:), intent(in) :: nums
integer, intent(in) :: k
logical :: result
integer :: i, j, n
n = size(nums)
do i = 1, n - k
do j = i + 1, min(n, i + k)
if (nums(i) == 1 .and. nums(j) == 1) then
result = .false.
return
end if
end do
end do
result = .true.
end function solve
end program main
T
```
program is_k_distance_apart
implicit none
integer, parameter :: k = 2
integer, dimension(8) :: nums = [1, 0, 0, 0, 1, 0, 0, 1]
logical :: result
result = is_k_distance_apart(nums, k)
if (result) then
print *, "All 1s are at least ", k, " places away from each other."
else
print *, "Not all 1s are at least ", k, " places away from each other."
end if
contains
function is_k_distance_apart(nums, k) result(is_apart)
implicit none
integer, dimension(:), intent(in) :: nums
integer, intent(in) :: k
logical :: is_apart
integer :: i, j
is_apart = .true.
do i = 1, size(nums) - k
if (nums(i) == 1) then
do j = i + 1, i + k
if (nums(j) == 1) then
is_apart = .false.
exit
end if
end do
if (.not. is_apart) exit
end if
end do
end function is_k_distance_apart
end program is_k_distance_apart
```
temp.f95:1:2: 1 | ``` | 1 Error: Invalid character in name at (1) temp.f95:8:33: 8 | result = is_k_distance_apart(nums, k) | 1 Error: Symbol at (1) is not appropriate for an expression temp.f95:18:58: 18 | function is_k_distance_apart(nums, k) result(is_apart) | 1 Error: PROGRAM attribute of βis_k_distance_apartβ conflicts with PROCEDURE attribute at (1) temp.f95:19:21: 19 | implicit none | 1 Error: Unexpected IMPLICIT NONE statement in CONTAINS section at (1) temp.f95:20:49: 20 | integer, dimension(:), intent(in) :: nums | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:21:32: 21 | integer, intent(in) :: k | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:22:27: 22 | logical :: is_apart | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:23:23: 23 | integer :: i, j | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:25:25: 25 | is_apart = .true. | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:27:32: 27 | do i = 1, size(nums) - k | 1 Error: Unexpected DO statement in CONTAINS section at (1) temp.f95:28:34: 28 | if (nums(i) == 1) then | 1 Error: Unexpected block IF statement in CONTAINS section at (1) temp.f95:29:35: 29 | do j = i + 1, i + k | 1 Error: Unexpected DO statement in CONTAINS section at (1) temp.f95:30:42: 30 | if (nums(j) == 1) then | 1 Error: Unexpected block IF statement in CONTAINS section at (1) temp.f95:31:42: 31 | is_apart = .false. | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:32:28: 32 | exit | 1 Error: EXIT statement at (1) is not within a construct temp.f95:33:23: 33 | end if | 1 Error: Expecting END PROGRAM statement at (1) temp.f95:34:19: 34 | end do | 1 Error: Expecting END PROGRAM statement at (1) temp.f95:35:40: 35 | if (.not. is_apart) exit | 1 Error: EXIT statement at (1) is not within a construct temp.f95:36:15: 36 | end if | 1 Error: Expecting END PROGRAM statement at (1) temp.f95:37:11: 37 | end do | 1 Error: Expecting END PROGRAM statement at (1) temp.f95:38:7: 38 | end function is_k_distance_apart | 1 Error: Expecting END PROGRAM statement at (1) temp.f95:40:2: 40 | ``` | 1 Error: Invalid character in name at (1)
def min_steps_to_make_palindrome(s):
n = len(s)
dp = [[0] * n for _ in range(n)]
for i in range(n - 2, -1, -1):
for j in range(i + 1, n):
if s[i] == s[j]:
dp[i][j] = dp[i + 1][j - 1]
else:
dp[i][j] = 1 + min(dp[i + 1][j], dp[i][j - 1])
return dp[0][n - 1]
We use dynamic programming to find the minimum number of steps required to make a string palindrome. The dp[i][j]
element of the 2D dp
array represents the minimum number of steps required to make a palindrome from substring s[i..j]
. We iterate through the string in reverse order, and for each pair of characters, if the characters are equal, we update the dp[i][j]
value using the dp[i+1][j-1]
. If they are not equal, we update the dp[i][j]
using the minimum value between dp[i+1][j]
and dp[i][j-1]
, adding 1 to it. In the end, we return the value at dp[0][n-1]
, which represents the minimum steps required to make the whole string palindrome.
int minStepsToMakePalindrome(std::string s) {
int n = s.size();
std::vector<std::vector<int>> dp(n, std::vector<int>(n, 0));
for (int i = n - 2; i >= 0; i--) {
for (int j = i + 1; j < n; j++) {
if (s[i] == s[j]) {
dp[i][j] = dp[i + 1][j - 1];
} else {
dp[i][j] = 1 + std::min(dp[i + 1][j], dp[i][j - 1]);
}
}
}
return dp[0][n - 1];
}
We use dynamic programming to find the minimum number of steps required to make a string palindrome. The dp[i][j]
element of the 2D dp
array represents the minimum number of steps required to make a palindrome from substring s[i..j]
. We iterate through the string in reverse order, and for each pair of characters, if the characters are equal, we update the dp[i][j]
value using the dp[i+1][j-1]
. If they are not equal, we update the dp[i][j]
using the minimum value between dp[i+1][j]
and dp[i][j-1]
, adding 1 to it. In the end, we return the value at dp[0][n-1]
, which represents the minimum steps required to make the whole string palindrome.