寒假刷题Day19

一、923. 三数之和的多种可能

cpp 复制代码
class Solution {
public:
    int threeSumMulti(vector<int>& arr, int target) {
       const int MOD = 1'000'000'007; // 正确的模数
        long long ans = 0; // 使用 long long 防止溢出
        std::sort(arr.begin(), arr.end());

        for (size_t i = 0; i < arr.size(); ++i) {
            int T = target - arr[i];
            size_t j = i + 1, k = arr.size() - 1;

            while (j < k) {
                if (arr[j] + arr[k] < T) {
                    j++;
                } else if (arr[j] + arr[k] > T) {
                    k--;
                } else if (arr[j] != arr[k]) { 
                    int left = 1, right = 1;
                    while (j + 1 < k && arr[j] == arr[j + 1]) {
                        left++;
                        j++;
                    }
                    while (k - 1 > j && arr[k] == arr[k - 1]) {
                        right++;
                        k--;
                    }

                    ans += static_cast<long long>(left) * right; // 避免溢出
                    ans %= MOD;
                    j++;
                    k--;
                } else {
                    long long M = k - j + 1;
                    ans += (M * (M - 1) / 2) % MOD; // 避免溢出
                    ans %= MOD;
                    break;
                }
            }
        }

        return static_cast<int>(ans);
    }
};

static_cast<long>(value)在编译时进行类型转换,比c风格的(long)value更安全更清晰

二、948. 令牌放置

思路:点数小的得分,大的吃掉,当不够获得最小令牌的分时候,吃一个最大的令牌

cpp 复制代码
class Solution {
public:
    int bagOfTokensScore(vector<int>& tokens, int P) {
        if (tokens.empty()) return 0;
        sort(tokens.begin(), tokens.end());
        if (P < tokens[0]) return 0;
        int N = tokens.size();
        int left = 0;
        int right = N - 1;
        int score = 0;
        int res = 0;
        while (left <= right) {
            if (P < tokens[left]) {
                if (score <= 0) return res;
                P += tokens[right];
                --score;
                --right;
            } else {
                P -= tokens[left];
                ++score;
                ++left;
                res = max(res, score);
            }
        }
        return res;
    }
};
相关推荐
Warren981 分钟前
使用SLF4J + Logback进行日志记录:
java·开发语言·前端·javascript·笔记·intellij-idea·logback
窝窝和牛牛7 分钟前
FastGPT 引申:基于 Python 版本实现 Java 版本 RRF
开发语言·开源
Zhsh-79 分钟前
idea中使用DeepSeek让编程更加便捷
java·ide·intellij-idea
局外人_Jia11 分钟前
【简单的C++围棋游戏开发示例】
开发语言·c++·c·visual studio
加油,旭杏25 分钟前
C++方向的面经
开发语言·c++
蓝之静云25 分钟前
IntelliJ IDEA 2024.3.4 版本无法正常加载maven项目
java·maven
钢板兽28 分钟前
Java后端高频面经——Mysql
java·后端·sql·mysql·面试
李少兄43 分钟前
初次使用 IDE 搭配 Lombok 注解的配置
java·ide·lombok
王有品1 小时前
python之爬虫入门实例
开发语言·爬虫·python
一水鉴天1 小时前
为AI聊天工具添加一个知识系统 之135 详细设计之76 通用编程语言 之6
开发语言·人工智能·架构