题目:806. 写字符串需要的行数
描述:我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 ‘a’ 需要的单位, widths[1] 代表 ‘b’ 需要的单位,…, widths[25] 代表 ‘z’ 需要的单位。
现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。
原代码##class Solution {
public:
vector<int> numberOfLines(vector<int>& widths, string s) {
vector<int> v;
int cnt = 1;
int remain = 100; //剩余单位
int used = 0; //已用单位
for (int i = 0; i < s.size(); ++i) {
int num = s[i] - 'a';
if (remain - widths[num] < 0) {
remain = 100;
cnt++;
}
remain -= widths[num];
used = 100 - remain;
}
return {cnt,used};
}
};
注意:
1、返回多个值的时候,要用大括号 {};
题目:2149. 按符号重排数组
描述:给你一个下标从 0 开始的整数数组 nums ,数组长度为 偶数 ,由数目相等的正整数和负整数组成。
你需要 重排 nums 中的元素,使修改后的数组满足下述条件:
任意 连续 的两个整数 符号相反
对于符号相同的所有整数,保留 它们在 nums 中的 顺序 。
重排后数组以正整数开头。
重排元素满足上述条件后,返回修改后的数组。
class Solution {
public:
vector<int> rearrangeArray(vector<int>& nums) {
vector<int> v1, v0, v;
for (int i = 0; i < nums.size(); ++i) {
if (nums[i] > 0) {
v1.push_back(nums[i]);
} else {
v0.push_back(nums[i]);
}
}
for (int i = 0; i < v1.size(); ++i) {
v.push_back(v1[i]);
v.push_back(v0[i]);
}
return v;
}
};
思路
遍历数组,用两个数组v1和v0顺序接住正数和负数;
在2定义一个新数组v,然后再交替插入v1和v2的值即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)