力扣C++|一题多解之数学题专场(1)

news2024/11/24 13:23:32

 

目录

7. 整数反转

9. 回文数

12. 整数转罗马数字

13. 罗马数字转整数

29. 两数相除


7. 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

-如果反转后整数超过 32 位的有符号整数的范围 [2^31, 2^31 -1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

  • -2^31 <= x <= 2^31 - 1

解法1: 

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int reverse(int x)
    {
        int MAX = 0x7fffffff;
        int MIN = 1 << 31;
        ostringstream stream, smax, smin;
        string ss;
        stream << x;
        ss += stream.str();
        smax << MAX;
        string max_num = smax.str();
        smin << MIN;
        string min_num = smin.str();
        std::reverse(ss.begin(), ss.end());
        if (x < 0)
        {
            ss.insert(0, "-");
            ss.pop_back();
        }
        if (x > 0 && ss.size() >= max_num.size() && (ss > max_num))
            return 0;
        else if (x < 0 && ss.size() >= min_num.size() && ss > min_num)
            return 0;
        else
            return atoi(ss.c_str());
    }
};

int main()
{
	Solution s;
	vector<int> nums = {123,-123,120,0};
	
	for(auto num:nums)
		cout << s.reverse(num) << endl;

	return 0;
} 

解法2:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)
    int reverse(int x)
    {
        int flag = x < 0 ? -1 : 1;
        int num = 0;
        while (x)
        {
            if ((flag == -1 && (INT_MIN / 10 > num)) || (flag == 1 && INT_MAX / 10 < num))
                return 0;
            num = num * 10 + x % 10;
            x /= 10;
        }
        return num;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {123,-123,120,0};
	
	for(auto num:nums)
		cout << s.reverse(num) << endl;

	return 0;
} 

解法3:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int reverse(int x)
    {
        int rev = 0;
        while (x != 0)
        {
            int pop = x % 10;
            x = x / 10;
            if (rev > INT_MAX / 10 || (rev == INT_MAX / 10 && pop > 7))
                return 0;
            if (rev < INT_MIN / 10 || (rev == INT_MIN / 10 && pop < -8))
                return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {123,-123,120,0};
	
	for(auto num:nums)
		cout << s.reverse(num) << endl;

	return 0;
} 

9. 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true

示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

示例 4:

输入:x = -101
输出:false

提示:

  • -2^31 <= x <= 2^31 - 1

进阶:你能不将整数转为字符串来解决这个问题吗?

解法1: 

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    bool isPalindrome(long int x)
    {
        long int rev;
        if (x < 0)
            return false;
        string str_x = to_string(x);
        std::reverse(str_x.begin(), str_x.end());
        stringstream out(str_x);
        out >> rev;
        return x == rev;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {121,-121,10,-101};
	
	for(auto num:nums)
		cout << s.isPalindrome(num) << endl;

	return 0;
} 

解法2:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    bool isPalindrome(long int x)
    {
        long int midrev = 0;
        if (x < 0 || (x % 10 == 0 && x != 0))
            return false;
        while (x > midrev)
        {
            midrev = midrev * 10 + x % 10;
            x /= 10;
        }
        return midrev == x || midrev / 10 == x;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {121,-121,10,-101};
	
	for(auto num:nums)
		cout << s.isPalindrome(num) << endl;

	return 0;
} 

解法3:  

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    bool isPalindrome(long int x) {
       if (x < 0) return false;
       long int sum = 0, t = x;
       while(x) 
       {
           sum = sum * 10 + x % 10;
           x /= 10;
       }
       return t == sum;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {121,-121,10,-101};
	
	for(auto num:nums)
		cout << s.isPalindrome(num) << endl;

	return 0;
} 

12. 整数转罗马数字

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给你一个整数,将其转为罗马数字。

示例 1:

输入: num = 3
输出: "III"

示例 2:

输入: num = 4
输出: "IV"

示例 3:

输入: num = 9
输出: "IX"

示例 4:

输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.

示例 5:

输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= num <= 3999

解法1:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    string getNum1000(int num1000)
    {
        if (num1000 == 3)
        {
            return "MMM";
        }
        else if (num1000 == 2)
        {
            return "MM";
        }
        else if (num1000 == 1)
        {
            return "M";
        }
        else
        {
            return "";
        }
    }

    string getNum100(int num100)
    {

        switch (num100)
        {
        case 1:
            return "C";
        case 2:
            return "CC";
        case 3:
            return "CCC";
        case 4:
            return "CD";
        case 5:
            return "D";
        case 6:
            return "DC";
        case 7:
            return "DCC";
        case 8:
            return "DCCC";
        case 9:
            return "CM";
        default:
            return "";
        }
    }

    string getNum10(int num10)
    {

        switch (num10)
        {
        case 1:
            return "X";
        case 2:
            return "XX";
        case 3:
            return "XXX";
        case 4:
            return "XL";
        case 5:
            return "L";
        case 6:
            return "LX";
        case 7:
            return "LXX";
        case 8:
            return "LXXX";
        case 9:
            return "XC";
        default:
            return "";
        }
    }

    string getNum1(int num1)
    {
        switch (num1)
        {
        case 1:
            return "I";
        case 2:
            return "II";
        case 3:
            return "III";
        case 4:
            return "IV";
        case 5:
            return "V";
        case 6:
            return "VI";
        case 7:
            return "VII";
        case 8:
            return "VIII";
        case 9:
            return "IX";
        default:
            return "";
        }
    }

    string intToRoman(int num)
    {
        int num1000 = num / 1000;
        int num100 = (num % 1000) / 100;
        int num10 = (num % 100) / 10;
        int num1 = (num % 10);
        string res;
        res = getNum1000(num1000) + getNum100(num100) + getNum10(num10) + getNum1(num1);
        return res;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {3,4,9,58,1994};
	
	for(auto num:nums)
		cout << s.intToRoman(num) << endl;

	return 0;
} 

解法2:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    string intToRoman(int num)
    {
        int values[13] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        string reps[13] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        string res;
        for (int i = 0; i < 13; i++)
        {
            while (num >= values[i])
            {
                num -= values[i];
                res += reps[i];
            }
        }
        return res;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {3,4,9,58,1994};
	
	for(auto num:nums)
		cout << s.intToRoman(num) << endl;

	return 0;
} 

解法3:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    string intToRoman(int num)
    {
        string bit1[10] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        string bit10[10] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
        string bit100[10] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        string bit1000[4] = {"", "M", "MM", "MMM"};
        return bit1000[num / 1000] + bit100[num % 1000 / 100] + bit10[num % 100 / 10] + bit1[num % 10];
    }
};

int main()
{
	Solution s;
	vector<int> nums = {3,4,9,58,1994};
	
	for(auto num:nums)
		cout << s.intToRoman(num) << endl;

	return 0;
} 

13. 罗马数字转整数

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给你一个整数,将其转为罗马数字。

示例 1:

输入: num = 3
输出: "III"

示例 2:

输入: num = 4
输出: "IV"

示例 3:

输入: num = 9
输出: "IX"

示例 4:

输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.

示例 5:

输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= num <= 3999

解法1:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int romanToInt(string s)
    {
        int sum = 0;
        for (int i = 1; i <= s.size(); i++)
        {
            if (s[i - 1] == 'I' && s[i] == 'V')
            {
                sum += 4;
                i++;
            }
            else if (s[i - 1] == 'I' && s[i] == 'X')
            {
                sum += 9;
                i++;
            }
            else if (s[i - 1] == 'X' && s[i] == 'L')
            {
                sum += 40;
                i++;
            }
            else if (s[i - 1] == 'X' && s[i] == 'C')
            {
                sum += 90;
                i++;
            }
            else if (s[i - 1] == 'C' && s[i] == 'D')
            {
                sum += 400;
                i++;
            }
            else if (s[i - 1] == 'C' && s[i] == 'M')
            {
                sum += 900;
                i++;
            }
            else if (s[i - 1] == 'I')
            {
                sum += 1;
            }
            else if (s[i - 1] == 'V')
            {
                sum += 5;
            }
            else if (s[i - 1] == 'X')
            {
                sum += 10;
            }
            else if (s[i - 1] == 'L')
            {
                sum += 50;
            }
            else if (s[i - 1] == 'C')
            {
                sum += 100;
            }
            else if (s[i - 1] == 'D')
            {
                sum += 500;
            }
            else if (s[i - 1] == 'M')
            {
                sum += 1000;
            }
        }
        return sum;
    }
};

int main()
{
	Solution s;
	vector<string> roma = {"III","IV","IX","LVIII","MCMXCIV"};
	for (auto r:roma)
		cout << s.romanToInt(r) << endl;

	return 0;
} 

解法2: 

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int romanToInt(string s)
    {
        int result = 0;
        int n = s.length();
        for (int i = 0; i < n; i++)
        {
            switch (s[i])
            {
            case 'I':
                if (i < n - 1 && s[i + 1] == 'V')
                {
                    result += 4;
                    i++;
                }
                else if (i < n - 1 && s[i + 1] == 'X')
                {
                    result += 9;
                    i++;
                }
                else
                    result++;
                break;
            case 'V':
                result += 5;
                break;
            case 'X':
                if (i < n - 1 && s[i + 1] == 'L')
                {
                    result += 40;
                    i++;
                }
                else if (i < n - 1 && s[i + 1] == 'C')
                {
                    result += 90;
                    i++;
                }
                else
                    result += 10;
                break;
            case 'L':
                result += 50;
                break;
            case 'C':
                if (i < n - 1 && s[i + 1] == 'D')
                {
                    result += 400;
                    i++;
                }
                else if (i < n - 1 && s[i + 1] == 'M')
                {
                    result += 900;
                    i++;
                }
                else
                    result += 100;
                break;
            case 'D':
                result += 500;
                break;
            case 'M':
                result += 1000;
            }
        }
        return result;
    }
};

int main()
{
	Solution s;
	vector<string> roma = {"III","IV","IX","LVIII","MCMXCIV"};
	for (auto r:roma)
		cout << s.romanToInt(r) << endl;

	return 0;
} 

解法3:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int romanToInt(string s)
    {
        int result = 0;
        map<char, int> luomab;

        luomab.insert(map<char, int>::value_type('I', 1));
        luomab.insert(map<char, int>::value_type('V', 5));
        luomab.insert(map<char, int>::value_type('X', 10));
        luomab.insert(map<char, int>::value_type('L', 50));
        luomab.insert(map<char, int>::value_type('C', 100));
        luomab.insert(map<char, int>::value_type('D', 500));
        luomab.insert(map<char, int>::value_type('M', 1000));
        for (int i = 0; i < s.length(); i++)
        {
            if (luomab[s[i]] >= luomab[s[i + 1]])
                result += luomab[s[i]];
            else
            {
                result += (luomab[s[i + 1]] - luomab[s[i]]);
                i++;
            }
        }
        return result;
    }
};

int main()
{
	Solution s;
	vector<string> roma = {"III","IV","IX","LVIII","MCMXCIV"};
	for (auto r:roma)
		cout << s.romanToInt(r) << endl;

	return 0;
} 

29. 两数相除

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

示例 1:

输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = truncate(3.33333..) = truncate(3) = 3

示例 2:

输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = truncate(-2.33333..) = -2

提示:

  • 被除数和除数均为 32 位有符号整数。
  • 除数不为 0。
  • 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31,  2^31 − 1]。本题中,如果除法结果溢出,则返回 2^31 − 1。

解法1:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int divide(int dividend, int divisor)
    {
        int INI_MIN = -2147483648, INI_MAX = 2147483647;
        if (dividend == divisor)
            return 1;
        if (divisor == 1)
            return dividend;
        if (dividend == INI_MIN && divisor == -1)
            return INI_MAX;
        if (divisor == INI_MIN)
        {
            if (dividend == INI_MIN)
                return 1;
            else
                return 0;
        }

        bool sign = false;
        if (dividend > 0 && divisor > 0 || dividend < 0 && divisor < 0)
        {
            sign = true;
        }

        int result_1 = 0;
        if (dividend == INI_MIN)
        {
            if (divisor > 0)
                dividend = dividend + divisor;
            else
                dividend = dividend - divisor;
            result_1++;
        }

        dividend = abs(dividend);
        divisor = abs(divisor);
        while (dividend >= divisor)
        {
            unsigned int temp = divisor, res = 1;

            while (dividend >= (temp << 1))
            {
                res <<= 1;
                temp <<= 1;
            }

            result_1 += res;
            dividend -= temp;
        }
        if (sign == true)
        {
            return result_1;
        }
        else
        {
            return -result_1;
        }
    }
};

int main()
{
	Solution s;
	
	cout << s.divide(10, 3) << endl;
	cout << s.divide(7, -3) << endl;

	return 0;
} 

解法2:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int divide(int dividend, int divisor)
    {
        int signal = 1;
        unsigned int dvd = dividend;
        if (dividend < 0)
        {
            signal *= -1;
            dvd = ~dvd + 1;
        }
        unsigned int dvs = divisor;
        if (divisor < 0)
        {
            signal *= -1;
            dvs = ~dvs + 1;
        }
        int shift = 0;
        while (dvd > dvs << shift)
        {
            shift++;
        }
        unsigned int res = 0;
        while (dvd >= dvs)
        {
            while (dvd < dvs << shift)
            {
                shift--;
            }
            res |= (unsigned int)1 << shift;
            dvd -= dvs << shift;
        }
        if (signal == 1 && res >= INT_MAX)
        {
            return INT_MAX;
        }
        else
        {
            return res * signal;
        }
    }
};

int main()
{
	Solution s;
	
	cout << s.divide(10, 3) << endl;
	cout << s.divide(7, -3) << endl;

	return 0;
} 

解法3:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int divide(int dividend, int divisor)
    {
        if (dividend == INT_MIN && divisor == -1)
            return INT_MAX;
        if (dividend == 0)
            return 0;
        int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
        long x = (dividend < 0) ? -(long)dividend : (long)dividend;
        long y = (divisor < 0) ? -(long)divisor : (long)divisor;
        long result = 0;
        while (x >= y)
        {
            long temp = y, mid = 1;
            while (x >= (temp << 1))
            {
                mid <<= 1;
                temp <<= 1;
            }
            result += mid;
            x -= temp;
        }
        return sign > 0 ? result : -result;
    }
};

int main()
{
	Solution s;
	
	cout << s.divide(10, 3) << endl;
	cout << s.divide(7, -3) << endl;

	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/754374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot项目中添加自定义日志

文章目录 当前项目使用的springboot为 2.2.2.release。低版本的话logging下的子标签有可能不是这样的。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELE…

vue 项目优化

去除冗余的css 消除框架中未使用的CSS,初步达到按需引入的效果 使用背景&#xff1a;vue2.x, webpack3.x 使用插件&#xff1a;purifycss-webpack 安装&#xff1a; npm i purifycss-webpack purify-css glob-all -D安装后各个插件的版本&#xff1a; “glob-all”: “^3.3.…

基于linux下的高并发服务器开发(第一章)- GDB调试(3)1.15

04 / GDB命令&#xff1a;断点操作 其中num代表断点编号&#xff0c;Type&#xff08;类型&#xff09;为断点&#xff08;breakpoint&#xff09;&#xff0c;Disp为断点状态&#xff0c;Enb是yes代表为有效断点&#xff0c;adress为断点地址&#xff0c;What说明断点的在那个…

APACHE KAFKA本机Hello World教程

目标 最近想要简单了解一下Apache Kafka&#xff0c;故需要在本机简单打个Kafka弄一弄Hello World级别的步骤。 高手Kafka大佬们&#xff0c;请忽略这里的内容。 步骤 Apacha Kafka要求按照Javak8以上版本的环境。从官网下载kafka并解压。 启动 # 生产kafka集群随机ID KA…

游戏AI的崛起:腾讯、网易等企业引领行业变革

随着游戏AI技术的迅猛发展&#xff0c;游戏行业正在经历一场前所未有的变革。在这个数字化时代&#xff0c;腾讯、网易等行业领先企业正以惊人的步伐在游戏AI领域取得重要进展。他们已经进入了游戏AI的2.0阶段&#xff0c;实现了内容多元化和行为智能化。尤其引人瞩目的是&…

SOLIDWORKS PDM—文件类别的限定

SOLIDWORKS产品数据管理 (PDM) 解决方案可帮助您控制设计数据&#xff0c;并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional&#xff0c;您的团队能够&#xff1a;1. 安全地存储和索引设计数据以实现快速检索&#xff1b;2. 打消关于…

【GUI】基于开关李雅普诺夫函数的非线性系统稳定(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

superset安装

1、拖动安装包 sh Miniconda3-latest-Linux-x86_64.sh安装路径&#xff1a; /usr/local/miniconda3 2、配置环境变量 在/etc/profile中添加两句 export CONDA_HOME/usr/local/miniconda3 export PATH$PATH:$CONDA_HOME/bin重新加载环境变量 source /etc/profile3、取消激活…

javascript循环数组有什么方法

javascript循环数组的方法 1、循环遍历数组 问题&#xff1a;想要很容易地访问数组的所有元素。 for循环可以用来访问数组的每一个元素。数组从0开始&#xff0c;而且数组属性length用来设定循环结束。 2、按顺序存储和访问值 问题&#xff1a;想要以这样一种方式来存储值&a…

怎么转发别人的朋友圈到自己朋友圈?

一键转发朋友 搜索指定好友&#xff0c;选择好友朋友圈内容&#xff0c;点击转发 2.转发后会跳到【发朋友圈】页面&#xff0c;可直接发送&#xff0c;也可二次编辑&#xff08;修改文案&#xff09;

SpringCloud——消息驱动Stream

屏蔽底层消息中间件MQ的差异&#xff0c;降低切换成本&#xff0c;统一消息的编程模型。 生产者 一、依赖 spring-cloud-starter-stream-rabbit &#xff08;rabbitMQ中间件&#xff09; 二、配置文件 server:port: 8801spring:application:name: cloud-stream-providercl…

从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别

目录 1. 关联式容器 1.1 树形结构的关联式容器 2. set的相关介绍 2.1 set的构造和迭代器 2.2 set的容量和操作函数 2.3 set使用代码 2.4 multiset使用 3. map的相关介绍 3.1 键值对 3.2 map的构造和迭代器 3.3 map的容量和操作函数 3.4 map使用代码 3.5 multimap使…

ai绘画软件免费下载哪个好用?探索ai绘画生成器

曾经有一个年轻的艺术爱好者&#xff0c;名叫小明。他对绘画充满热情&#xff0c;渴望能够通过绘画表达自己的创造力和想法。然而&#xff0c;他并没有接受过正规的美术训练&#xff0c;也没有负担得起的昂贵绘画软件。因此&#xff0c;他开始思考ai绘画软件免费下载哪个好用&a…

SpringCloud——消息总线Bus

SpringCloud Bus将分布式系统的节点与轻量级消息系统链接起来的框架&#xff0c;是对SpringCloud Config的加强&#xff0c;广播自动版的配置。 支持两种消息代理&#xff1a;RabbitMQ和Kafka 一、创建工程&#xff0c;添加依赖 spring-cloud-starter-config spring-cloud-st…

【DeepSpeed 教程】四,DeepSpeed ZeRO++博客和代码解析

0x0. 系列文章 DeepSpeed-Chat 打造类ChatGPT全流程 笔记二之监督指令微调DeepSpeed-Chat 打造类ChatGPT全流程 笔记一【DeepSpeed 教程翻译】三&#xff0c;在 DeepSpeed中使用 PyTorch Profiler和Flops ProfilerDeepSpeed结合Megatron-LM训练GPT2模型笔记&#xff08;上&…

程序员如何制作PPT?

有道无术&#xff0c;术尚可求也&#xff1b;有术无道&#xff0c;止于术。大家好&#xff0c;我是程序员雪球&#xff0c;今天让我们一起探讨如何从零开始制作高质量的 PPT。 上周&#xff0c;领导要求我撰写一份关于 4到6月持续集成运营分析的报告&#xff0c;并通过 PPT 的形…

【Python爬虫与数据分析】爬虫常用标准库(时间、随机数)

目录 一、模块化概述 二、time库 1. 时间获取 2. 时间格式化 3. 程序计时 三、datetime库 1. datetime.datetime类 2. datetime.timedelta类 四、random库 1. 基本随机函数 2. 扩展随机函数 3. 随机时间的生成 一、模块化概述 Python程序由模块组成&#xff0c;一个…

Redis数据结构 — SkipList

目录 跳表结构设计 跳表节点结构设计 跳表节点查询过程 跳表节点层数设置 为什么用跳表不用红黑树&#xff1f; 跳表平均指针数目为1/(1-p)公式推导 跳表的优势是能支持平均 O(logN) 复杂度的节点查找&#xff0c;支持进行高效的范围查询 SkipList&#xff08;跳表&…

idea-控制台输出乱码问题

idea-控制台输出乱码问题 现象描述&#xff1a; 今天在进行IDEA开发WEB工程调式的时候控制台日志输出了乱码&#xff0c;如下截图 其实开发者大多都知道乱码是 编码不一致导致的&#xff0c;但是有时候就是不知到哪些地方不一致&#xff0c;今天我碰到的情况可能和你的不相同…

【C++】多态及原理

文章目录 1.多态的概念2.多态的定义及实现2.1多态的构成条件2.2虚函数的重写2.3析构函数的重写2.4 C11 override和 final2.5重载、重写(覆盖)、重定义(隐藏)的对比 3.抽象类3.1定义 4.多态的原理4.1虚函数表 虚表单继承的虚表多继承的虚表问答题 1.多态的概念 多态&#xff0c;…