Given an array of integers
Return
Example 1:
Input: nums = [1,2,3,3,4,4,5,6], k = 4 Output: true Explanation: Array can be divided into [1,2,3,4] and [3,4,5,6].
Example 2:
Input: nums = [3,2,1,2,3,4,3,4,5,9,10,11], k = 3 Output: true Explanation: Array can be divided into [1,2,3] , [2,3,4] , [3,4,5] and [9,10,11].
Example 3:
Input: nums = [3,3,2,2,1,1], k = 3 Output: true
Example 4:
Input: nums = [1,2,3,4], k = 3 Output: false Explanation: Each array should be divided in subarrays of size 3.
Constraints:
1 <= k <= nums.length <= 105 1 <= nums[i] <= 109
Solution
這次有要求每個 subsequence 的長度
可以用同一個思路來解,並且可以簡化
只要檢查到,沒辦法形成一個新的 subsequence,直接回傳 false
其餘的思路一樣
kotlin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
fun isPossibleDivide(nums: IntArray, k: Int): Boolean { | |
return if(nums.size % k != 0) { | |
false | |
} else { | |
val freqMap = mutableMapOf<Int,Int>() | |
for(n in nums) { | |
freqMap[n] = freqMap[n]?.let{it+1} ?: 1 | |
} | |
nums.sort() | |
for(n in nums) { | |
if(freqMap[n]!! == 0) { | |
continue | |
} | |
for(i in 1 until k) { | |
if(freqMap[n+i] == null || freqMap[n+i]!! <= 0) { | |
return false | |
} else { | |
freqMap[n+i] = freqMap[n+i]!! - 1 | |
} | |
} | |
freqMap[n] = freqMap[n]!! - 1 | |
} | |
true | |
} | |
} | |
} |
沒有留言:
張貼留言