LeetCode 网易-1. 分割环(前缀和 + 哈希)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 网易-1. 分割环(前缀和 + 哈希)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
小易有 n 個數字排成一個環,你能否將它們分成連續的兩個部分(即在環上必須連續),使得兩部分的和相等?
輸入描述:
第一行數據組數 T ,對于每組數據
第一行數字 n ,表示數字個數
接下來一行 n 個數,按順序給出環上的數字。
2 <= n <= 100000, 1 <= Ai <= 10 ^ 9
輸出描述:
對于每組數據,一行輸出YES/NO
來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/S0WXIw
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
#include<bits/stdc++.h> using namespace std; int main() {int T, n, a, i;cin >> T;while(T--){cin >> n; vector<long long> arr(n, 0);//注意溢出i = 0;while(n--){cin >> a;if(i == 0)arr[i] = a;elsearr[i] = arr[i-1] + a;//前綴和i++;}if(arr.back()%2 != 0)//和不能被2整除,分不開{cout << "NO" << endl;continue;}unordered_set<long long> s;long long half = arr.back()/2;bool yes = false;for(i = 0; i < arr.size(); ++i){if(s.count(arr[i]-half)){ //前綴和減去half的值存在,即找到連續的和為halfyes = true;break;}s.insert(arr[i]);//更新前綴和的集合}if(yes)cout << "YES" << endl;elsecout << "NO" << endl;} }0 ms 3.2 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 网易-1. 分割环(前缀和 + 哈希)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1684. 统计一致字
- 下一篇: LeetCode 第 32 场双周赛(9