diff --git a/DataStructures/Array/LC1252.cpp b/DataStructures/Array/LC1252.cpp index a9b8345..a773ab5 100644 --- a/DataStructures/Array/LC1252.cpp +++ b/DataStructures/Array/LC1252.cpp @@ -2,6 +2,17 @@ using namespace std; +// 1252. 奇数值单元格的数目 +// 给你一个 m x n 的矩阵,最开始的时候,每个单元格中的值都是 0。 + +// 另有一个二维索引数组?indices,indices[i] = [ri, ci] 指向矩阵中的某个位置,其中 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。 + +// 对 indices[i] 所指向的每个位置,应同时执行下述增量操作: + +// ri 行上的所有单元格,加 1 。 +// ci 列上的所有单元格,加 1 。 +// 给你 m、n 和 indices 。请你在执行完所有?indices?指定的增量操作后,返回矩阵中 奇数值单元格 的数目。 + class Solution { public: // 直接模拟 O(q*m*n+m*n) diff --git a/DataStructures/Stack&Queue/LC735.cpp b/DataStructures/Stack&Queue/LC735.cpp new file mode 100644 index 0000000..e83c5ad --- /dev/null +++ b/DataStructures/Stack&Queue/LC735.cpp @@ -0,0 +1,63 @@ +#include + +using namespace std; + +// 735. 行星碰撞 + +// 给定一个整数数组 asteroids,表示在同一行的行星。 +// 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。 +// 找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。 + +class Solution { +public: + // 使用双端队列暴力 + vector asteroidCollision1(vector& asteroids) { + deque myQ; + vector result; + for(auto& i : asteroids){ + bool diffDirect = i<0; + bool boom = false; + int val = abs(i); + while(!myQ.empty()&&diffDirect&&val>=myQ.front()){ + if(val==myQ.front()){ + boom = true; + myQ.pop_front(); + break; + } + myQ.pop_front(); + } + if(!boom){ + if(!diffDirect){ + myQ.push_front(i); + }else if(myQ.empty()){ + result.push_back(i); + } + } + } + while(!myQ.empty()){ + result.push_back(myQ.back()); + myQ.pop_back(); + } + return result; + } + // 数组模拟栈空间优化 + vector asteroidCollision2(vector& asteroids) { + vector result; + for(auto& i : asteroids){ + bool diffDirect = i<0; + bool boom = false; + int val = abs(i); + // 当行星没爆炸并 且 会发生碰撞 + while(!boom&&!result.empty()&&diffDirect&&result.back()>0){ + boom = val<=result.back(); + if(val>=result.back()){ + result.pop_back(); + } + } + if(!boom){ + result.push_back(i); + } + } + return result; + } +}; \ No newline at end of file