leetcode 927. Three Equal Parts | 927. 三等分(Java)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 927. Three Equal Parts | 927. 三等分(Java)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
https://leetcode.com/problems/three-equal-parts/
題解
不知道為什么是 hard,感覺(jué)這道題沒(méi)有套路(印象中這幾道 hard 都沒(méi)有什么套路,這就是 hard 的原因嗎),甚至沒(méi)有 get 到這題的難點(diǎn)是什么,大概是在考察分析問(wèn)題的能力吧。
分析完之后,思路很簡(jiǎn)單。先算總共有多少個(gè) 1,就可以分離出右邊的部分了。然后根據(jù)右邊的部分,匹配出左邊部分和中間部分。
class Solution {public int[] threeEqualParts(int[] arr) {int leftEnd, midEnd, rightBegin;// 統(tǒng)計(jì)每個(gè)相同部分中1的個(gè)數(shù)int count = 0;for (int n : arr)count += n;if (count == 0) return new int[]{0, arr.length - 1};if (count % 3 != 0) return new int[]{-1, -1};count /= 3;// 分離最后一個(gè)部分int cnt = 0;int i;for (i = arr.length - 1; cnt < count; i--) {cnt += arr[i];}rightBegin = i + 1;// 分離第一個(gè)部分,并驗(yàn)證其與最后一個(gè)部分相同i = 0;while (arr[i] != 1) i++;int j = rightBegin;while (j < arr.length) {if (arr[i++] != arr[j++]) return new int[]{-1, -1};}// 分離中間部分,并驗(yàn)證其與最后一個(gè)部分相同leftEnd = i - 1;while (arr[i] != 1) i++;j = rightBegin;while (j < arr.length) {if (arr[i++] != arr[j++]) return new int[]{-1, -1};}midEnd = i;return new int[]{leftEnd, midEnd};} }總結(jié)
以上是生活随笔為你收集整理的leetcode 927. Three Equal Parts | 927. 三等分(Java)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: leetcode 365. Water
- 下一篇: leetcode 357. Count