力扣第1013题 将数组分成和相等的三部分

力扣第1013题 将数组分成和相等的三部分

class Solution {
    public:
    bool canThreePartsEqualSum(vector<int>& A) {
        int sum = accumulate(A.begin(), A.end(), 0);
        if (sum % 3 != 0)
            return false;
        int temp = sum / 3;
        int len = A.size();
        int left = 0, right = len - 1;
        int leftSum = A[left], rightSum = A[right];
        while (left + 1 < right)
        {
            if (leftSum == temp && rightSum == temp)
            {
                return true;
            }
            if (leftSum != temp)
            {
                leftSum += A[++left];
            }
            if (rightSum != temp)
            {
                rightSum += A[--right];
            }
        }
        return false;
    }
};

原文地址:https://www.cnblogs.com/woodjay/p/12466315.html

时间: 2024-11-06 03:48:41

力扣第1013题 将数组分成和相等的三部分的相关文章

力扣第136题 只出现一次的数

力扣第136题 只出现一次的数 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 class Solution { public: int singleNumber(vector<int>& nums) { int len = nums.size(); fo

力扣第260题 只出现一次的数字 III

力扣第260题 只出现一次的数字 III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案. 你的算法应该具有线性时间复杂度.你能否仅使用常数空间复杂度来实现? class Solution { public: vector<int> singleNumber(vector<int&

力扣第300题 最长上升子序列

力扣第300题 最长上升子序列 class Solution { public: int lengthOfLIS(vector<int>& nums) { int size = nums.size(); if (size == 0) { return 0; } vector<int> vec; int len = 1; vec.push_back(nums[0]); for (int i = 1; i < size; i++) { if (vec[len - 1] &

力扣第70题:爬楼梯

力扣第70题:爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶. 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶. 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶 ? int climbStairs(int n) { if (n <= 1) { re

力扣第95题 不同的二叉搜索树II

力扣第95题 不同的二叉搜索树II 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; vector<TreeNode*> generateTree(int start, int end) { vector<TreeNode*> v

力扣第452题 用最少数量的箭引爆气球

力扣第452题 用最少数量的箭引爆气球 class Solution { public: int findMinArrowShots(vector<vector<int>>& points) { int len = points.size(); if (len == 0) { return 0; } sort(points.begin(), points.end(), [](const vector<int> &pl1, const vector<

力扣第820题 单词的压缩编码

力扣第820题 单词的压缩编码 class TrieNode { public: map<char, TrieNode*> children; }; class Solution { public: void GetNum(TrieNode * node, int num, int& count) { if (node == NULL || node->children.size() == 0) { count += num + 1; return; } for (map<

力扣第887题 鸡蛋掉落

力扣第887题 鸡蛋掉落 class Solution { public: int superEggDrop(int K, int N) { vector<vector<int>> dp(K+1, vector<int>(N+1, 0)); int m = 0; for (; dp[K][m] < N;) { m++; for (int k = 1; k <= K; k++) dp[k][m] = 1 + dp[k-1][m-1] + dp[k][m-1];

将数组分成和相等的三个部分

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12656345.html 将数组分成和相等的三个部分(43min) 题目链接:https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum/submissions/ 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 <