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

1、阿秀在工作之余开发了一个编程资源网站,目前已经收集了很多不错的学习资源和黑科技(附带下载地址),如你有意欢迎体验以及推荐自己认为不错的资源,众人拾柴火焰高,我为人人,人人为我🔥!

2、👉23年5月份我从字节跳动离职跳槽到某外企期间,为方便自己找工作,增加上岸几率,我自己从0开发了一个互联网中大厂面试真题解析网站,包括两个前端和一个后端。能够定向查看某些公司的某些岗位面试真题,比如我想查一下行业为互联网,公司为字节跳动,考察岗位为后端,考察时间为最近一年之类的面试题有哪些?

网站地址:InterviewGuide大厂面试真题解析网站。点此可以查看该网站的视频介绍:B站视频讲解 如果可以的话求个B站三连,感谢!

3、😊 分享一个学弟发给我的20T网盘资源合集点此白嫖,主要是各类高清影视、电视剧、音乐、副业、纪录片、英语四六级考试、考研考公等资源。

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

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

6、🔥 欢迎准备计算机校招的小伙伴加入我的学习圈子,一个人踽踽独行不如一群人报团取暖,圈子里沉淀了很多过去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