0
点赞
收藏
分享

微信扫一扫

leetcode:栈模拟,消除gcd为1,替换数组中的非互质数

滚过红尘说红尘 2022-03-11 阅读 27

在这里插入图片描述
思路:
栈模拟
若栈顶两个gcd不为1,则消去且更新,每加入一个就while循环判断一次

src:

class Solution {
public:
    vector<int> replaceNonCoprimes(vector<int>& nums) {
        // 使用vector栈模拟
        // 优先左边配对
        // 否则右边配对
        vector<int> s = {nums[0]};// 初始化
        // 逐一放进去
        for(int i = 1; i < nums.size(); i++) {
            s.push_back(nums[i]);
            // 进行消除
            while(s.size() > 1) {
                // 看头两个能否消除
                int x = s.back(), y = s[s.size() - 2];
                int k = gcd(x, y);
                // 若不能消除,前面也不能消除,继续加
                if(k == 1) break;
                // 消除并补上
                s.pop_back();
                // First
                s.pop_back();
                //s.push_back(int(x * y / k));
                //cout << (x * y / k) << endl;
                //一个技巧,若越界int,先转成longlong再变回int
                cout << int((long long)x * y / k) << endl;
                s.push_back(int((long long)x * y / k));
                // Second
                //s.back() *= x / k;
            }
        }
        
        return s;
    }
};

总结:
vector当stack用,pushback popback back获取最后一个。。。
若int越界,先变longlong再变int是一个技巧

举报

相关推荐

0 条评论