微众银行面试题

1 切糖果

时间限制:3000MS
内存限制:589824KB

题目描述:
小美想要买糖果店的一根长长的糖果。糖果店顾客可以从中选取一个位置然后老板会在那切断糖果前端到那个切断位置的糖果就会出售给这位顾客。这个糖果其实不同段有着不同的口味,小美希望她选出来的糖果中各个段有着不同的口味,在这基础上希望能选出尽可能长的糖果。小美想知道她能买到最长多长的糖果,请你帮帮她。

输入描述
第一行1个整数n,表示糖果的长度。
第二行n个整数a1,a2,…an,其中ai表示从糖果前端开始第i段的口味,每段均1为单位长度
对于100%的数据,1≤n≤50000,1≤a≤50000
输出描述
输出一行一个整数表示能买到的糖果的最长长度,且其中不包含相同口味。

样例输入

5
1 2 3 3 4

样例输出

3

提示
如果我们买长度为4的糖果,包含的口味为[1,2,3,3],存在了重复。
而长度为3时,包含的口味为[1,2,3],不存在重复。因此长度3为最长的不存在重复口味糖果长度。

#include <iostream>
#include <vector>
#include <unordered_set>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> candy(n);
    unordered_set<int> flavors;
    int max_length = 0;
    int start = 0;

    for (int i = 0; i < n; i++) {
        cin >> candy[i];
    }

    for (int end = 0; end < n; end++) {
        while (flavors.count(candy[end])) {
            flavors.erase(candy[start]);
            start++;
        }
        flavors.insert(candy[end]);
        max_length = max(max_length, end - start + 1);
    }

    cout << max_length << endl;
    
    return 0;
}

2 橡皮泥 题目描述:

酷酷的小明准备和小伙伴们展示他捏出来的超酷的橡皮泥士兵。在展示之前,小明发现有些橡皮泥士兵大小十分相似甚至相同,这让小明感觉不是很酷,因为小明想要他的橡皮泥作品都有自己的风格,即使是大小也要有区别。

小明的n个橡皮泥士兵的大小分别为a1, a2, .…an,小明可以通过给某个士兵加一单位橡皮泥来使得其大小增加一单位。小明想知道如果他想要让所有的橡皮泥士兵大小都不相同,至少需要一共加多少单位橡皮泥

输入描述
第一行1个整数n,表示小明的橡皮泥士兵数量。
第二行n个整数a1, a2, .…an,分别表示小明的橡皮泥士兵的大小。
对于100%的数据,1≤n≤50000 1≤ai≤100000

输出描述
输出一行一个整数表示总共至少加多少单位的橡皮泥。

样例输入

5
1 1 2 3 3

样例输出

5

提示

我们给一个大小为1的橡皮泥士兵增加4单位橡皮泥,大小变为5;
再给一个大小为3的橡皮泥士兵增加1单位橡皮泥,大小变为4。
此时橡皮泥士兵们的大小分别为1、2、3、4、5,没有两个橡皮泥士兵拥有相同大小了。
可以证明没有更优方案。


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

int main() {
    cin.tie(nullptr); cout.tie(nullptr);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;

    vector<int> sizes(n);

    for (int i = 0; i < n; i++) {
        cin >> sizes[i];
    }

    sort(sizes.begin(), sizes.end());

    int additional_units = 0;

    for (int i = 1; i < n; i++) {
        if (sizes[i] <= sizes[i - 1]) {
            additional_units += sizes[i - 1] - sizes[i] + 1;
            sizes[i] = sizes[i - 1] + 1;
        }
    }

    cout << additional_units << endl;
    return 0;
}

3 小明的数组题目描述:

小明有一个数组。他挑选了一个有理数u/v,现在他想知道这个数组有多少个子区间的平均值恰好等于u/v。数组的子区间即是数组中连续的一段区间,如数组[4,2,6]有6个子区间[4],[2],[6],[4,2],[2,6],[4,2,6]。

输入描述
第一行有三个整数n,u,v(1≤n,v≤100000,1≤u≤n*v),代表数组的长度,小明选择的有理数的分子和分母。输入保证u和v的最大公因数是1,即u/v是最简分数
第二行有n个绝对值不超过1000000的整数,代表数组中的元素。
数字间两两有空格隔开。

输出描述
输出一个非负整数,代表所求的答案。

样例输入

6 5 2
2 4 1 3 2 3

样例输出

6
#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n, u, v;
    cin >> n >> u >> v;

    vector<int> arr(n);

    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    int count = 0;

    for (int i = 0; i < n; i++) {
        int sum = 0;
        int num = 0;

        for (int j = i; j < n; j++) {
            sum += arr[j];
            num++;

            if (num * u == sum * v) {
                count++;
            }
        }
    }
    cout << count << endl;
    return 0;
}
//#include <iostream>
//#include <bits/stdc++.h>
//using namespace std;
//
//int main() {
//	string s ;
//	cin >> s;
//	//cout << (s.find('.') == -1) << endl;
//
//
//	if (s.size() < 2 || s.size() > 255 || s.find('.') == -1) {
//		cout << "false" << endl;
//		return 0;
//	}
//	vector<string> biaoqian;
//	int begin = 0;
//	for (int i = 0; i < s.size();++i) {
//		if (s[i] == '.') {
//			biaoqian.push_back(s.substr(begin, i - begin));
//			begin = i + 1;
//		}
//	}
//	biaoqian.push_back(s.substr(begin, s.size() - begin));
//
//	for (int i = 0;i < biaoqian.size()-1 ;i++) {
//		if (biaoqian[i][0] == '-' || biaoqian[i][biaoqian[i].size() - 1] == '-') {
//			cout << "false" << endl;
//			return 0;
//		}
//		for (int x = 0; x < biaoqian[i].size();++x) {
//			if ((biaoqian[i][x] >= '0' && biaoqian[i][x] <= '9') || (biaoqian[i][x] >= 'a' && biaoqian[i][x] <= 'z') ||
//				(biaoqian[i][x] >= 'A' && biaoqian[i][x] <= 'Z') || biaoqian[i][x] == '-')
//				continue;
//			else
//			{
//				cout << "false" << endl;
//				return 0;
//			}
//		}
//	}
//	if (biaoqian[biaoqian.size() - 1].size() < 2) {
//		cout << "false" << endl;
//		return 0;
//	}
//	for (int x = 0; x < biaoqian[biaoqian.size() - 1].size();++x) {
//		if ((biaoqian[biaoqian.size() - 1][x] >= 'a' && biaoqian[biaoqian.size() - 1][x] <= 'z') ||
//			(biaoqian[biaoqian.size() - 1][x] >= 'A' && biaoqian[biaoqian.size() - 1][x] <= 'Z') )
//			continue;
//		else
//		{
//			cout << "false" << endl;
//			return 0;
//		}
//	}
//	cout << "true" << endl;
//	return 0;
//}
 64 位输出请用 printf("%lld")
//





//#include <iostream>
//#include <bits/stdc++.h>
//using namespace std;
//#define LL long long
//int main() {
//	/*LL n;
//	cin >> n;*/
//	//string s = "113343435999999999";
//
//	string s;
//	cin >> s;
//	LL maxNum = stoll(s);
//	
//	for (int i = 0;i < s.size();i++) {
//		char num = s[0];
//		for (int i = 0;i < s.size()-1;i++) {
//			s[i] = s[i + 1];
//		}
//		s[s.size() - 1] = num;
//		maxNum = max(maxNum, stoll(s));
//		//cout << "1111111111" << endl;
//	}
//	cout << maxNum << endl;
//
//	return 0;	
//}






#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
#define LL long long




int main() {

	string s;
	cin >> s;
	//do {
	//	cout << s << endl;
	//} while (next_permutation(s.begin(),s.end()));
	
	
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值