逐位加|二分
lcp18
二分
class Solution {
typedef long long ll;
public:
int breakfastNumber(vector<int>& staple, vector<int>& drinks, int x)
{
ll ret=0;
const ll MOD = 1e9 + 7;
sort(staple.begin(),staple.end());
sort(drinks.begin(),drinks.end());
for(auto& s:staple)
{
if(s>=x)
break;
int max_d = x - s;
// lower_bound找第一个>max_d的位置,减去begin得<=max_d的元素个数
auto it = lower_bound(drinks.begin(), drinks.end(), max_d + 1);
ret += it - drinks.begin();
}
ret%=MOD;
return (int)ret;
}
};
lc989
while ( A 没完 || B 没完))
A 的当前位
B 的当前位
和 = A 的当前位 + B 的当前位 + 进位carry
当前位 = 和 % 10;
进位 = 和 / 10;
A ++
B ++
判断还有进位吗
代码:
class Solution {
public:
vector<int> addToArrayForm(vector<int>& A, int K) {
int a_len = A.size() - 1, sum = 0, carry = 0;
vector<int> res;
while (a_len >= 0 || K != 0) {
int x = a_len >= 0 ? A[a_len] : 0;
int y = K != 0 ? K % 10 : 0;
sum = x + y + carry;
carry = sum / 10;
sum %= 10;
K /= 10;
a_len--;
res.push_back(sum);
}
if (carry != 0)
res.push_back(carry);
reverse(res.begin(), res.end());
return res;
}
};