必刷算法题之字符串(题目及代码)---C++

2023-11-16

第1题: 执行操作后的变量值

题目描述:
在这里插入图片描述

解题思路:
这题比较简单,由于给出的是字符串数组,因此依次比较每个字符串的内容即可。注意字符串用的是双引号。

解题代码如下:

class Solution {
public:
    int finalValueAfterOperations(vector<string>& operations) {
        int x = 0;
        for(int i = 0;i < operations.size();i++){
            if("X++"==operations[i]||"X++"==operations[i]){
                x+=1;
            }else{
                x-=1;
            }
        }
        return x;
    }
};

第2题:罗马数字转整数

题目描述:
在这里插入图片描述
解题思路:
在这里插入图片描述

解题代码如下:

class Solution {
private:
    unordered_map<char,int> roman = {    //定义哈希表,用于字符匹配
        {'I',1},
        {'V',5},
        {'X', 10},
        {'L', 50},
        {'C', 100},
        {'D', 500},
        {'M', 1000},
    };
public:
    int romanToInt(string s) {
        int res=0;
        for(int i = 0;i < s.length();i++){
            int value = roman[s[i]];
            if(i < s.length()-1 && value < roman[s[i+1]]){
                res-=value;   //如果后面的数更大,说明要减去当前的数
            }else{
                res+=value;
            }
        }
        return res;
    }
};

第3题:句子中的最多单词数

题目描述:
在这里插入图片描述
解题思路:
计算空格数量
由于一个句子开头结尾均不含空格,且单词之间均只含一个空格,因此一个句子中的单词数一定等于空格数加上 1。
下面我们给出两种解法:
解题代码如下:

class Solution {
public:
    int mostWordsFound(vector<string>& sentences) {
        int res = 0;
        for(int i = 0;i < sentences.size();i++){
            int temp = 0;  //每个句子中的单词数
            for(int j = 0;j < sentences[i].size();j++){
                if(' '==sentences[i][j]){
                    temp++;
                } 
            }
            res=max(res,temp+1);
        }
        return res;
    }
};
------------这种方法用到了count()函数,用于计算字符串中某成员出现的次数-------
class Solution {
public:
    int mostWordsFound(vector<string>& sentences) {
        int res = 0;
        for (const string& sentence: sentences) {
            // 单词数 = 空格数 + 1
            int cnt = count(sentence.begin(), sentence.end(), ' ') + 1;
            res = max(res, cnt);
        }
        return res;
    }
};

第4题:左旋转字符串

题目描述:
在这里插入图片描述
解题思路:
原始数组下标为n到最后一位的元素赋给目标数组从第0位到第s.length()-n位的元素。
然后在把原始数组从第0位到第n-1位置元素赋给目标数组下标为n到最后一位的元素。

注意
一开始的时候为什么要让res=s;,是因为如果不给res分配长度空间的话,会出问题。

解题代码如下:

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        string res=s;
        for(int i = 0;i < s.length()-n;i++){   //目标字符串数组的前s.length()-n个元素是原来数组的后s.length()-n个元素
            res[i]=s[i+n];
        }
        for(int j = 0;j < n;j++){
            res[s.length()-n+j]=s[j];
        }
        return res;
    }
};

第5题:宝石与石头

题目描述:
在这里插入图片描述

解题思路:
关于这道题我们给出三种解法,其中解法三是对解法二的优化。
解法一:暴力搜索法
这种方法不用多说,时间复杂度是O(mn),其中m和n分别是石头和宝石的规模。
解题代码如下:

------------------解法一--------------------
class Solution {
public:
    int numJewelsInStones(string jewels, string stones) {
        int res = 0;
        for(int i = 0;i < stones.length();i++){
            for(int j = 0;j < jewels.length();j++){
                if(stones[i]==jewels[j]){
                    res++;
                }
            }
        }
        return res;
    }
};

解法二:利用哈希表
我们首先可以把宝石存在哈希表中,然后遍历我们手中的石头,如果这个石头在哈希表中出现过,那么宝石的数量+1。
这里我们用到了map结构
解题代码如下:

------------------解法二--------------------
class Solution {
public:
    int numJewelsInStones(string jewels, string stones) {
        unordered_map<char,int> jew;  
        int res = 0;
        for(int i = 0;i < jewels.length();i++){
            jew[jewels[i]]=i+1;    //为什么要+1,不需要解释了
        }
        for(int i = 0;i < stones.length();i++){
            if(jew[stones[i]]>0){
                res++;
            }
        }
        return res;
    }
};

优化
很容易的可以发现,我们压根没必要用到键值对,其实用集合set就行。
mapset都是stl中的关联容器,map以键值对的形式存储,key=value组成pair,是一组映射关系。set只有值,可以认为只有一个数据,并且set中元素不可以重复且自动排序。
解题代码如下:

-------------------解法三--------------------------------------
class Solution {
public:
    int numJewelsInStones(string jewels, string stones) {
        unordered_set<char> jew;
        int res = 0;
        for(int i = 0;i < jewels.length();i++){
            char a = jewels[i];
            jew.insert(a);
        }
        for(int i = 0;i < stones.length();i++){
            char b = stones[i];
            if(jew.count(b)){   //使用count()判断元素是否在set容器中。若在:返回1,若不在,返回0。 
                res++;
            }
        }
        return res;
    }
};

第6题: Excel 表中某个范围内的单元格

题目描述:
在这里插入图片描述

解题思路:
首先要注意提示中给出的范围信息。
然后通过观察例1中的返回值我们可以发现字母是在前的,数字是在后的,这确定了循环的次序。
小提示: for循环不仅仅可用于数字从1-10或者从1到100的循环,还可以用于char型数组的循环。
解题代码如下:

class Solution {
public:
    vector<string> cellsInRange(string s) {
        vector<string> res;
        for(char i = s[0];i <= s[3];i++){      // for循环不只是用于int型的数据
            for(char j = s[1];j <= s[4];j++){
                string l;
                l=i;
                l+=j;
                res.push_back(l);
            }
        }
        return res;
    }
};

第7题:括号的最大嵌套深度

题目描述:
在这里插入图片描述

解题思路:
首先虽然这道题看上去很复杂的样子,但实际上通过看示例我们就能发现其实这道题很简单

  • 遍历字符串 s,定义Size用于记录左括号的数量,res记录出现过的最大深度。
  • 假设从左往右开始遍历,遇到左括号1,同时更新当前的深度,遇到右括号则-1
  • 直到遍历结束为止

小提示: for循环不仅仅可用于数字从1-10或者从1到100的循环,还可以用于char型数组的循环。
解题代码如下:

class Solution {
public:
    int maxDepth(string s) {
        int Size = 0,res = 0;
        for(int i = 0;i < s.length();i++){
            if(s[i] == '('){
                ++Size;
                res = max(res,Size);
            }
            if(s[i] == ')'){
                --Size;
            }            
        }
        return res;
    }
};

第8题:分割平衡字符串

题目描述:
在这里插入图片描述

解题思路:
首先注意观察最后一个示例,当然其实也没啥好注意的。

  • 记录R和L出现的次数
  • 如果两者相等,就将他们分割,分割的次数加1。(注意要大于0才行,因为一开始赋值时0,两者相等)
  • 将R和L中的数进行重置,直到遍历结束为止

解题代码如下:

class Solution {
public:
    int balancedStringSplit(string s) {
        int R = 0,L = 0,res = 0;
        for(char a:s){
            if(a == 'R'){
                ++R;
            }else{
                ++L;
            }
            if(R == L && R > 0){
                ++res;     //说明R和L的数量相等了
                R = 0;     //重置R和L的数量
                L = 0;
            }
        }
        return res;
    }
};

第9题:最长公共前缀

题目描述:

在这里插入图片描述
解题思路:

  • 将数组中第一个字符串与其它位置的进行比较
  • 从第一个字符开始比较,如果和后续位置的字符都一样,那么保存这个字符到公共前缀中。如果遇到不一样的,则终止,返回先前保存的公共前缀。

解题代码如下:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
    	if (!strs.size()) {
            return "";
        }
        string temp,res;        //temp用于保存临时比较的字符,
        for(int a = 0;a < strs[0].size();a++){
            temp += strs[0][a];    //如果不用temp,那么后面的字符如果不相同,就会多出这个数
            for(int i = 1;i < strs.size();i++){
                if(temp[a] != strs[i][a] && a==0){
                    return "";
                }
                if(temp[a] != strs[i][a]){
                    return res;
                }
            }
            res = temp;        //将比较完毕后的temp返回
        }
        return res;
    }
};

优化
我们可以找到最短的字符串数组,这样再与其它数组进行比较就会快很多
解题代码如下:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (!strs.size()) {
            return "";
        }
        string temp,res;        //temp用于保存临时比较的字符,
        int min_number=INT_MAX,min=0;        //寻找下标最小的字符串
        for(int i=0;i<strs.size();i++){      
            if(min_number <= strs[i].size()){
                min_number = strs[i].size();
                min = i;                 //更新下标
            }
        }
        for(int a = 0;a < strs[min].size();a++){
            temp += strs[0][a];    //如果不用temp,那么后面的字符如果不相同,就会多出这个数
            for(int i = 1;i < strs.size();i++){
                if(temp[a] != strs[i][a] && a==0){
                    return "";
                }
                if(temp[a] != strs[i][a]){
                    return res;
                }
            }
            res = temp;        //将比较完毕后的temp返回
        }
        return res;
    }
};

第10题:IP 地址无效化

题目描述:
在这里插入图片描述

解题思路:
这题很简单,直接替换即可,然后返回替换后的字符串
还有一种方法使用到了replace()函数的,这里不展示了。
解题代码如下:

class Solution {
public:
    string defangIPaddr(string address) {
        //可以把address中的值赋给a,然后判断是否为.,如果为.那么将[.]赋给a
        string a,res;
        for(char s:address){
            a = s;
            if(a == "."){
                a = "[.]";
            }
            res += a;
        }
        return res;
    }
};

第11题:反转字符串 II

题目描述:
在这里插入图片描述

解题思路:
这题采用模拟法进行求解。每隔2k个字符就对前k个字符进行反转。

解题代码如下:

class Solution {
public:
    string reverseStr(string s, int k) {
        // 1. 每隔 2k 个字符的前 k 个字符进行反转
        for (int i = 0; i < s.size(); i += (2 * k)) {
            if (s.size() >= i + k) {  //2.如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
                reverse(s.begin() + i, s.begin() + i + k );
                continue;
            }
            if(s.size() < i + k){   //3.如果剩余字符少于k个,则将剩余字符全部反转。
                reverse(s.begin() + i, s.begin() + s.size());
            }  
        }
        return s;
    }
};

补充,这里可以自己定义一个reverse()函数,就当作是复习了。

class Solution {
public:
    void reverse(string& s, int start, int end) {  //左闭右闭区间
        for (int i = start, j = end; i < j; i++, j--) {
            swap(s[i], s[j]);
        }
    }
    string reverseStr(string s, int k) {
        for (int i = 0; i < s.size(); i += (2 * k)) {
            if (s.size() >= i + k) { 
                reverse(s, i, i + k -1);    // 左闭右闭区间,所以要-1
                continue;
            }
            if(s.size() < i + k){ 
                reverse(s, i, s.size() -1);;
            }  
        }
        return s;
    }
};

第12题:替换空格

题目描述:
在这里插入图片描述

解题思路:
不推荐的方法,使用s.replace(" “,”%20");
原本是想对string s,进行遍历然后直接替换的,
即判断s[i]是否等于’ ',如果是,则s[i] = ‘%20’ 。但是这样是不行的,只能插入一个%,如果用s[i] = “%20” ,则又会说报错,说不允许string赋值给char。
正解

  • 定义一个string res,用于接收s中的值,
  • 遇到s中的值为’ ',则直接+=“%20”。

解题代码如下:

class Solution {
public:
    string replaceSpace(string s) {
        string res;
        for(int i = 0; i < s.length(); i++){
            if(s[i] != ' '){
                res+=s[i];
            }else res += "%20";
        }
        return res;
    }
};

上述方法的时间和空间复杂度都为O(N),由于C++可以对字符串进行拓展,因此还有更节省空间的方法。感兴趣的小伙伴可以点击这里方法二:原地修改

第13题:颠倒字符串中的单词

题目描述:
在这里插入图片描述

解题思路:
本题有三种解法,个人最喜欢解法3,也好理解。
解法1,不推荐
使用split库函数,分隔单词,然后定义一个新的string字符串,最后再把单词倒序相加,不过这样做的话,这道题就失去了它的意义。
解法2,推荐
将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。

  • 移除多余空格
  • 将整个字符串反转
  • 将每个单词反转

移除多余空格
用erase库函数移除空格的话,时间复杂度为O(n²),因为erase的时间复杂度为O(n)。

void removeExtraSpaces(string& s) {
	// 删除相邻都为空格的前一个元素
    for (int i = s.size() - 1; i > 0; i--) {
        if (s[i] == s[i - 1] && s[i] == ' ') {
            s.erase(s.begin() + i);
        }
    }
    // 删除字符串最后面的空格
    if (s.size() > 0 && s[s.size() - 1] == ' ') {
        s.erase(s.begin() + s.size() - 1);
    }
    // 删除字符串最前面的空格
    if (s.size() > 0 && s[0] == ' ') {
        s.erase(s.begin());
    }
}

因此 建议使用双指针法来去移除空格,最后resize(重新设置)一下字符串的大小,就可以做到O(n)的时间复杂度。
双指针法(快慢指针法) 在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。
以下面这张图为例:这题为leetcode中的27题. 移除元素 。可以看到,fastIndex走的快,slowIndex走的慢,最后slowIndex就标记了新字符串的长度。
在这里插入图片描述
针对本题,双指针的解题代码如下:

void removeExtraSpaces(string& s) {
    int slowIndex = 0, fastIndex = 0; // 定义快指针,慢指针
    // 去掉字符串前面的空格
    while (s.size() > 0 && fastIndex < s.size() && s[fastIndex] == ' ') {
        fastIndex++;
    }
    for (; fastIndex < s.size(); fastIndex++) {
        // 去掉字符串中间部分的冗余空格
        if (fastIndex - 1 > 0
                && s[fastIndex - 1] == s[fastIndex]
                && s[fastIndex] == ' ') {
            continue;
        } else {
            s[slowIndex++] = s[fastIndex];
        }
    }
    if (slowIndex - 1 > 0 && s[slowIndex - 1] == ' ') { // 去掉字符串末尾的空格
        s.resize(slowIndex - 1);
    } else {
        s.resize(slowIndex); // 重新设置字符串大小
    }
}

总的代码如下:

class Solution {
public:
    // 反转字符串s中左闭又闭的区间[start, end]
    void reverse(string& s, int start, int end) {
        for (int i = start, j = end; i < j; i++, j--) {
            swap(s[i], s[j]);
        }
    }

    // 移除冗余空格:使用双指针(快慢指针法)O(n)的算法
    void removeExtraSpaces(string& s) {
        int slowIndex = 0, fastIndex = 0; // 定义快指针,慢指针
        // 去掉字符串前面的空格
        while (s.size() > 0 && fastIndex < s.size() && s[fastIndex] == ' ') {
            fastIndex++;
        }
        for (; fastIndex < s.size(); fastIndex++) {
            // 去掉字符串中间部分的冗余空格
            if (fastIndex - 1 > 0
                    && s[fastIndex - 1] == s[fastIndex]
                    && s[fastIndex] == ' ') {
                continue;
            } else {
                s[slowIndex++] = s[fastIndex];
            }
        }
        if (slowIndex - 1 > 0 && s[slowIndex - 1] == ' ') { // 去掉字符串末尾的空格
            s.resize(slowIndex - 1);
        } else {
            s.resize(slowIndex); // 重新设置字符串大小
        }
    }

    string reverseWords(string s) {
        removeExtraSpaces(s); // 去掉冗余空格
        reverse(s, 0, s.size() - 1); // 将字符串全部反转
        int j = 0; //单词的起始位置
        for (int i = 1; i < s.size(); ++i) {
            if (s[i] == ' ') {         //i == ''说明已经匹配到单词的结束位置了
                reverse(s, j, i - 1);  //反转单词
                j = i + 1;             //下一个单词的起始位置
            }
        }
        reverse(s, j, s.size() - 1);  //反转最后一个单词
        return s;
    }
};

解法3,牛掰

涉及到反转的问题,通常都可以用到栈结构进行巧妙的求解。

  • 定义一个string类型的栈结构,以及一个string word。word用于插入栈结构
  • 从头开始遍历s,从不为’ ‘的元素开始,将当前字符拼接到word中,判断i+1是否为’ ',如果是,说明这个单词结束了,然后将word插入到栈中,再将word清零
  • 待s遍历完毕之后,将栈空间的所有元素弹出,记住,每弹出一个,要加上一个’ '(末尾单词除外)

解题代码如下:

class Solution {
public:
    string reverseWords(string s) {
        stack <string> stk;  //定义一个string栈,栈中的每个元素就是一个单词
        int n = s.size();
        string word;
        for (int i = 0; i < n; ++i){//先遍历字符串,提前单词,word入栈
            if (s[i] != ' '){      //利用这个可以找到每个单词的开头
                word += s[i];
                if (i ==  n-1 || s[i+1] == ' '){//关键判断条件:什么时候入栈,当字母后有空格或已是最后一个则判断为word,入栈
                    stk.push(word);
                    word = "";     //重置word,以便下次使用
                }
            }
        }
        string ans;
        while (!stk.empty()){//释放栈中元素,加入空格组成反转后结果
            ans += stk.top();
            stk.pop();
            if (!stk.empty()){
                ans += ' ';  
            }  
        }
         return ans;
    }
};

导航链接:必刷算法题—二分查找篇(C++)
导航链接:必刷算法题—排序篇(C++)
导航链接:必刷算法题—哈希篇(C++)
导航链接:剑指—动态规划篇(C++)
导航链接:剑指—链表篇(C++)
导航链接:剑指—队列&栈篇(C++)
导航链接:剑指—树篇(C++)

注: 以上题目都是在牛客网或是leetcode中刷的,有自己做的,也有不会做看别人精华解题思路,然后总结的。如果侵犯了您的权益,请私聊我。
最后,觉得本文内容对你有所帮助的话,感谢您能点赞收藏,在我的剑指offer专栏还有相关的算法刷题文章,等待您的阅读!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

必刷算法题之字符串(题目及代码)---C++ 的相关文章

  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob

随机推荐

  • 组件文件已损坏或android内部模块,android - Android Q更新后,模块化系统组件在托管配置文件中不可用 - 堆栈内存溢出...

    在从工作配置文件配置的设备设置应用中将操作系统从Android 9升级到10后 请停止运行 java lang RuntimeException Unable to start activity ComponentInfo com andr
  • Java中两个List之间的比较(差集,交集,并集)

    实现比较两个List之间的差异 包括获取两List的差集 交集 并集 不去重 去重 的API解法和优化解法的解决方案 求差集 差集 基于API解法 适用于小数据量 求List1中有的但是List2中没有的元素 时间复杂度 O list1 s
  • vs code 国内镜像源

    我们在去 vs code 官网下载软件时 会发现下载速度非常的慢 这是因为vs code官网本身在国外 离得比较远 自然下载速度快不起来了 如直接使用下面的链接 https az764295 vo msecnd net stable f80
  • python实现批量翻译——你不会还在一个个翻译吧

    python实现翻译 translate 语句 文本 google translate 语句 import pandas as pd from translate import Translator translator Translato
  • linux服务器成功卸载和安装anaconda(详细)

    卸载anaconda 只需要移除其文件夹即可 sudo rm rf path anaconda3 下载anaconda 在官网查找一下自己需要的anaconda版本 下载之后是一个 sh文件 并将其上传至服务器节点 也可以在清华源节点进行下
  • Linux基础笔记10

    find 常用示例 用来在指定目录下查找文件 任何位于参数之前的字符串都将被视为欲查找的目录名 如果使用该命令时 不设置任何参数 则 find 命令将在当前目录下查找子目录与文件 并且将查找到的子目录和文件全部进行显示 学习参考博文 骏马金
  • vue3实现H5监听浏览器回退并阻止回退

    当你的移动端页面有弹窗的组件并且这个组件不是来自于某些知名的组件库 你是否有这样的需求 当用户唤起弹窗之后又按下了手机自带的回退键 弹窗之前的页面也被关掉了 而用户本身的意愿是关掉弹窗而已 如果你也有这样的诉求 这篇文章帮你解决 1 给hi
  • 在不支持AirDrop的Mac上开启和使用AirDrop的方法

    本帖最后由 luciiferre 于 12 11 18 06 54 编辑 苹果为OS X 10 7 Lion系统加入了全新的AirDrop功能 该功能允许两台Mac之间无线传输文件 用户无需设置 只需要打开AirDrop文件夹即可查看到其他
  • 计算机网络之物理层

    目录 一 物理层概述 二 数据通信的基础知识 2 1数据通信系统的模型 2 2关于信道的几个基本概念 2 3信道的极限容量 三 物理层下面的传输媒体 3 1导引型传输媒体 3 2非导引型传输媒体 四 信道复用技术 五 数字传输系统 六 宽带
  • 华为OD机试真题 Java 实现【字符串加密】【2023Q1 100分】,附详细解题思路

    一 题目描述 有一种技巧可以对数据进行加密 它使用一个单词作为它的密匙 下面是它的工作原理 首先 选择一个单词作为密匙 如TRAILBLAZERS 如果单词中包含有重复的字母 只保留第1个 将所得结果作为新字母表开头 并将新建立的字母表中未
  • 闭环系统的零极点图判定稳定性_三步教你设计运放电路稳定性

    1 前言 集成运算放大器的参数有很多 但涉及到实际应用环境的不同 一些参数非常重要 另外一些则相对次要 例如 在交流高频领域 会重视带宽和压摆率 而在直流精密场合 则重视输入失调电压 输入偏置电流 还有一些参数 不管直流还是交流 都会重点关
  • 清华大学开源的chatGLM-6B部署实战

    Windows部署 win10 通过wsl部署 常见问题 torch cuda OutOfMemoryError CUDA out of memory 在Windows的系统环境变量中增加 变量名 PYTORCH CUDA ALLOC CO
  • 通过alter table A engine=innodb来重建表

    1 业务场景 即为什么要重建表 由于前期的存储设计不合理 表里有个字段 用于存储大段字符串 导致存储到磁盘的空间极大 严重影响表相关的增删改查速度 所有需要对表存储设计进行重构 并对表进行重建 2 实践记录 我们业务场景是由软删字段的 de
  • C++,类的多态

    一 多态的基本概念 多态 父类的指针或引用 指向或初始化子类的对象 调用子类对父类重新的函数 进而展开子类的功能 函数重新的必要条件 必须有继承关系 子类和父类有同名同类型的函数 父类中的该函数必须是虚函数 虚函数 在函数前加上virtua
  • K8s Kubernetes集群部署

    root master yum y install docker ce root master systemctl enable now docker Created symlink etc systemd system multi use
  • QT取消标题栏,如何实现窗口移动

    qt自带的标题栏在多个平台都显示的不一样 而且在常用的window平台也非常的不好看 所以我们经常会用到的美化方式就是会取消标题栏的显示 但是取消标题栏的显示就会出现一个问题就是无法实现窗口的移动 所以这里给出一个方法实现左键按压窗口控件任
  • MATLAB算法实战应用案例精讲-【异常检测】OCSVM算法(附Python和MATLAB代码)

    目录 前言 几个高频面试题目 1 OneClass 与二分类 多分类的区别
  • 计算机体系结构基础知识介绍之缓存性能的十大进阶优化之非阻塞缓存(四)

    优化四 非阻塞缓存 提高缓存带宽 对于允许乱序执行的流水线计算机 处理器不需要因数据高速缓存未命中而停止 例如 处理器可以继续从指令高速缓存获取指令 同时等待数据高速缓存返回丢失的数据 非阻塞高速缓存或无锁高速缓存允许数据高速缓存在未命中期
  • 继承中方法的覆盖重写_概念与特点,

    重写 Override 概念 在继承关系当中 方法的名称一样 参数列表也一样 重写 Override 方法的名称一样 参数列表 也一样 覆盖 覆写 重载 Overload 方法的名称一样 参数列表 不一样 方法的覆盖重写特点 创建的是子类对
  • 必刷算法题之字符串(题目及代码)---C++

    文章目录 第1题 执行操作后的变量值 第2题 罗马数字转整数 第3题 句子中的最多单词数 第4题 左旋转字符串 第5题 宝石与石头 第6题 Excel 表中某个范围内的单元格 第7题 括号的最大嵌套深度 第8题 分割平衡字符串 第9题 最长