这是四则或许对你有些许帮助的信息:

1、👉 最近我发现了一个每日都会推送最新校招资讯的《校招日程》文档,其中包括往届补录应届实习校招信息,比如各种大厂、国企、银行、事业编等信息都会定期更新,帮忙扩散一下。

2、😍 免费分享阿秀个人学习计算机以来收集到的免费学习资源,点此白嫖;也记录一下自己以前买过的不错的计算机书籍、网络专栏和垃圾付费专栏

3、🚀如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人踩过的坑留下的经验,事实上你现在遇到的大多数问题你的学长学姐师兄师姐基本都已经遇到过了。

4、🔥 欢迎准备计算机校招的小伙伴加入我的学习圈子,一个人踽踽独行不如一群人报团取暖,圈子里沉淀了很多过去21/22/23届学长学姐的经验和总结,好好跟着走下去的,最后基本都可以拿到不错的offer!此外,每周都会进行精华总结和分享!如果你需要《阿秀的学习笔记》网站中📚︎校招八股文相关知识点的PDF版本的话,可以点此下载

# 165. 比较版本号 挺好的一道题

力扣原题链接(点我直达) (opens new window)

比较两个版本号 version1version2。 如果 *version1* > *version2* 返回 1,如果 *version1* < *version2* 返回 -1, 除此之外返回 0

你可以假设版本字符串非空,并且只包含数字和 . 字符。

. 字符不代表小数点,而是用于分隔数字序列。

例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。

你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 34。其第三级和第四级修订号均为 0

示例 1:

输入: version1 = "0.1", version2 = "1.1"
输出: -1
1
2

示例 2:

输入: version1 = "1.0.1", version2 = "1"
输出: 1
1
2

示例 3:

输入: version1 = "7.5.2.4", version2 = "7.5.3"
输出: -1
1
2

示例 4:

输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。
1
2
3

示例 5:

输入:version1 = "1.0", version2 = "1.0.0"
输出:0
解释:version1 没有第三级修订号,这意味着它的第三级修订号默认为 “0”。
1
2
3

提示:

  1. 版本字符串由以点 (.) 分隔的数字字符串组成。这个数字字符串可能有前导零。
  2. 版本字符串不以点开始或结束,并且其中不会有两个连续的点。

# 1、双指针,不过int会溢出

"19.8.3.17.5.01.0.0.4.0.0.0.0.0.0.0.0.0.0.0.0.0.00.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.000000.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.000000"
"19.8.3.17.5.01.0.0.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0000.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.000000"
1
2
int compareVersion(string version1, string version2) {

        int sum1 = 0, sum2 = 0;
        int len1 = version1.size(),len2 = version2.size();
        int index1 = 0,index2 = 0;

        while(index1 < len1 || index2 < len2){
            int temp = 0;
            while(index1 < len1  && version1[index1] != '.'){
                //if(version1[index1] ==0 && temp == 0) index1++;
                //if(version1[index1] ==0 && temp != 0) temp = temp*10;

                if(version1[index1] == 0) temp = temp*10;

               // if(version1[index1] !=0 && temp != 0) temp = temp*10 + version1[index1]-'0';
                //if(version1[index1] !=0 && temp == 0) temp = version1[index1] - '0';
                if(version1[index1] !=0) temp = temp*10 + version1[index1]-'0';

                index1++;

            }
            sum1 = sum1*10 +temp;

            temp = 0;
            while(index2 < len2  && version2[index2] != '.'){
                //if(version1[index1] ==0 && temp == 0) index1++;
                //if(version1[index1] ==0 && temp != 0) temp = temp*10;

                if(version2[index2] == 0) temp = temp*10;

               // if(version1[index1] !=0 && temp != 0) temp = temp*10 + version1[index1]-'0';
                //if(version1[index1] !=0 && temp == 0) temp = version1[index1] - '0';
                if(version2[index2] !=0) temp = temp*10 + version2[index2]-'0';

                index2++;
            }
            sum2 = sum2*10 +temp;
            //cout<<sum1<<" "<<sum2<<endl;
            index1++;
            index2++;
            if(sum1 > sum2) return 1;
            if(sum1 < sum2) return -1;

        }
        return 0;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

# 2、改进一下,其实每次比较完毕,如果一样就可以置0,再继续比较下去了

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:6.2 MB, 在所有 C++ 提交中击败了100.00%的用户

int compareVersion(string version1, string version2) {

	int sum1 = 0, sum2 = 0;
	int len1 = version1.size(), len2 = version2.size();
	int index1 = 0, index2 = 0;

	while (index1 < len1 || index2 < len2) {
		int temp = 0;
		while (index1 < len1 && version1[index1] != '.') {
			//if(version1[index1] ==0 && temp == 0) index1++;
			//if(version1[index1] ==0 && temp != 0) temp = temp*10;

			if (version1[index1] == 0) temp = temp * 10;

			// if(version1[index1] !=0 && temp != 0) temp = temp*10 + version1[index1]-'0';
			 //if(version1[index1] !=0 && temp == 0) temp = version1[index1] - '0';
			if (version1[index1] != 0) temp = temp * 10 + version1[index1] - '0';

			index1++;

		}
		sum1 = sum1 * 10 + temp;

		temp = 0;
		while (index2 < len2 && version2[index2] != '.') {
			//if(version1[index1] ==0 && temp == 0) index1++;
			//if(version1[index1] ==0 && temp != 0) temp = temp*10;

			if (version2[index2] == 0) temp = temp * 10;

			// if(version1[index1] !=0 && temp != 0) temp = temp*10 + version1[index1]-'0';
			 //if(version1[index1] !=0 && temp == 0) temp = version1[index1] - '0';
			if (version2[index2] != 0) temp = temp * 10 + version2[index2] - '0';

			index2++;
		}
		sum2 = sum2 * 10 + temp;
		cout<<sum1<<" "<<sum2<<endl;
		index1++;
		index2++;
		if (sum1 > sum2) return 1;
		if (sum1 < sum2) return -1;

		sum1 = 0;//这是关键
		sum2 = 0;

	}
	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

# 3、精简代码

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:6.3 MB, 在所有 C++ 提交中击败了100.00%的用户

int compareVersion(string version1, string version2) {

	int sum1 = 0, sum2 = 0;
	int len1 = version1.size(), len2 = version2.size();
	int index1 = 0, index2 = 0;

	while (index1 < len1 || index2 < len2) {
		sum1 = 0;
		sum2 = 0;

		while (index1 < len1 && version1[index1] != '.') {
			sum1 = sum1 * 10 + version1[index1] - '0';
			index1++;

		}

		while (index2 < len2 && version2[index2] != '.') {
            sum2 = sum2 * 10 + version2[index2] - '0';
			index2++;
		}

		index1++;
		index2++;
		//cout << sum1 << " " << sum2 << endl;
		if (sum1 > sum2) return 1;
		if (sum1 < sum2) return -1;

	}
	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30