806. 写字符串需要的行数

806. 写字符串需要的行数,第1张

leetcode力扣刷题打卡

题目: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的值即可。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/676008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存