题解 | 数组分组

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> array;
    int a, sum5 = 0, sum3 = 0, sum = 0;
    for (int i = 0; i < n; i++) {
        cin >> a;
        if (a % 5 == 0) {
            sum5 += a;
        } else if (a % 3 == 0) {
            sum3 += a;
        } else {
            sum += a;
            array.push_back(a);
        }
    }

    int diff = sum3 - sum5;

    if(array.size()==0 && diff==0){
        cout << "true";
        return 0;
    }

    sum += diff;
    if (sum % 2 != 0) {
        cout << "false";
        return 0;
    }
    sum /= 2;
    vector<int> dp;
    for (auto& e1 : array) {
        if (e1 == sum) {
            cout << "true";
            return 0;
        }

        int cur_length = dp.size();
        for (int i = 0; i < cur_length; i++) {
            int cur_sum = dp[i] + e1;
            if (cur_sum == sum) {
                cout << "true";
                return 0;
            }
            auto it = find(dp.begin(), dp.end(), cur_sum);

            if (it == dp.end()) {
                dp.push_back(cur_sum);
            }

        }

        dp.push_back(e1);
    }
    cout << "false";
    return 0;
}
// 64 位输出请用 printf("%lld")
  1. 算出5整除和3整除数组的差值diff
  2. 算出,剩下数字的和sum
  3. (sum+diff)/2就是我们要凑出来的数字,如果不是偶数直接false
  4. 用dp的办法看剩下数字能不能凑出sum= (sum+diff)/2
全部评论

相关推荐

白火同学:先说结论,对于一份实习简历来说,整体还是挺不错的,技术深度和广度都到位,找到一份中小厂的实习没啥问题。 再说说能优化的点吧。 1、量化结果,项目中很多工作量化一下结果给面试官的感受会更直观一些,也能体现你对应用该项技术的理解(在众多技术为什么要用它,运行性能或者说开发效率往往是一大考虑指标;而不是说大家做这种功能都用它,所以我用它)。 2、突出亮点,项目中可以从“工作职责”择一些“个人亮点”另写一块,优先去写开发过程中遇到的xx问题,使用xx技术达到xx效果,针对性去写一些疑杂难的功能,能带出你个人思考和解决的过程。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务