> 文章列表 > C/C++每日一练(20230417)

C/C++每日一练(20230417)

C/C++每日一练(20230417)

目录

1. 字母异位词分组  🌟🌟

2. 计算右侧小于当前元素的个数  🌟🌟🌟

3. 加一  🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 字母异位词分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入:[eat", "tea", "tan", "ate", "nat", "bat"]
输出:[[ate","eat","tea"],["nat","tan"],["bat"]]

说明:

  • 所有输入均为小写字母。
  • 不考虑答案输出的顺序。

以下程序实现了这一功能,请你填补空白处内容:

···c++
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    vector<vector<string>> groupAnagrams(vector<string> &strs)
    {
        vector<vector<string>> res;
        unordered_map<string, vector<string>> ht;
        for (const auto &str : strs)
        {
            int counts[26] = {0};
            for (char c : str)
            {
                counts[c - 'a']++;
            }
            string key;
            for (int i : counts)
            {
                ________________;
            }
            ht[key].push_back(str);
        }
        for (const auto &t : ht)
        {
            res.push_back(t.second);
        }
        return res;
    }
};
```

出处:

https://edu.csdn.net/practice/25797440

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:vector<vector<string>> groupAnagrams(vector<string> &strs){vector<vector<string>> res;unordered_map<string, vector<string>> ht;for (const auto &str : strs){int counts[26] = {0};for (char c : str){counts[c - 'a']++;}string key;for (int i : counts){key.push_back(i + '#');key.push_back('0');}ht[key].push_back(str);}for (const auto &t : ht){res.push_back(t.second);}return res;}
};string vectorToString(vector<string> vect) {stringstream ss;ss << "[";for (size_t i = 0; i < vect.size(); i++){ss << vect[i];ss << (i < vect.size() - 1 ? "," : "]");}return ss.str();
}int main()
{Solution s;vector<string> strs = {"eat", "tea", "tan", "ate", "nat", "bat"};for (auto str:s.groupAnagrams(strs))cout << vectorToString(str)<< " ";cout << endl;return 0;
}

输出:

[bat] [tan,nat] [eat,tea,ate]


2. 计算右侧小于当前元素的个数

给你`一个整数数组 nums ,按要求返回一个新数组 counts 
数组 counts 有该性质: counts[i] 的值是  nums[i] 右侧小于 nums[i] 的元素的数量。

示例 1:

输入:nums = [5,2,6,1]
输出:[2,1,1,0] 
解释:
5 的右侧有 2 个更小的元素 (2 和 1)
2 的右侧仅有 1 个更小的元素 (1)
6 的右侧有 1 个更小的元素 (1)
1 的右侧有 0 个更小的元素

示例 2:

输入:nums = [-1]
输出:[0]

示例 3:

输入:nums = [-1,-1]
输出:[0,0]

提示:

  • 1 <= nums.length <= 10^5
  • -10^4 <= nums[i] <= 10^4

出处:

https://edu.csdn.net/practice/25797441

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:struct BSTNode{int val;int count;BSTNode *left;BSTNode *right;BSTNode(int x) : val(x), left(NULL), right(NULL), count(0) {}};void BST_insert(BSTNode *node, BSTNode *insert_node, int &count_small){if (insert_node->val <= node->val){node->count++;if (node->left){BST_insert(node->left, insert_node, count_small);}else{node->left = insert_node;}}else{count_small += node->count + 1;if (node->right){BST_insert(node->right, insert_node, count_small);}else{node->right = insert_node;}}}vector<int> countSmaller(vector<int> &nums){vector<int> result;vector<BSTNode *> node_vec;vector<int> count;for (int i = nums.size() - 1; i >= 0; i--){node_vec.push_back(new BSTNode(nums[i]));}count.push_back(0);for (int i = 1; i < node_vec.size(); i++){int count_small = 0;BST_insert(node_vec[0], node_vec[i], count_small);count.push_back(count_small);}for (int i = node_vec.size() - 1; i >= 0; i--){delete node_vec[i];result.push_back(count[i]);}return result;}
};

输出:

[2,1,1,0]


3. 加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

出处:

https://edu.csdn.net/practice/25797442

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:vector<int> plusOne(vector<int> &digits){int carry = 1;vector<int> res;for (int i = digits.size() - 1; i >= 0; i--){int d = digits[i] + carry;res.push_back(d % 10);carry = d / 10;}if (carry > 0){res.push_back(carry);}reverse(res.begin(), res.end());return res;}
};string vectorToString(vector<int> vect) {stringstream ss;ss << "[";for (size_t i = 0; i < vect.size(); i++){ss << to_string(vect[i]);ss << (i < vect.size() - 1 ? "," : "]");}return ss.str();
}int main()
{Solution s;vector<int> digits = {1,2,3};cout << vectorToString(s.plusOne(digits))<< endl;digits = {9,9,9};cout << vectorToString(s.plusOne(digits))<< endl;return 0;
}

输出:

[1,2,4]
[1,0,0,0]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏