笔试常见编程题

目录

1、简化Unix路径

2、石块向下掉落

3、最大连续子数组

4、最长递增子序列

5、循环小数计算循环节和循环节长度

6、压缩空格和字符串

7、只压缩空格

8、排列组合算法

9、大数相加、相减

10、十进制数转换为任意进制、任意进制转换为10进制数

11、反转链表

12、字符串转数字与数字转字符串方式


1、简化Unix路径

/*********************leetCode72简化Unix路径*****************/

#include <iostream>
#include <string>
#include <stack>

using namespace std;

string simplifyPath(string path)
{
	if (path.empty())
		return "";

	stack<string> ss;
	for (int i = 0; i < path.size();)
	{
		//跳过斜线‘/'
		while (i < path.size() && '/' == path[i])
			++i;
		string s = "";
		while (i < path.size() && path[i] != '/')
			s += path[i++];
		//如果是".."则弹出栈,否则入栈
		if (".." == s && !ss.empty())
			ss.pop();
		else if (s != "" && s != "." && s != "..")
			ss.push(s);
	}
	if (ss.empty())
		return "/";

	string s = "";
	while (!ss.empty())
	{
		s = "/" + ss.top() + s;
		ss.pop();
	}
	return s;
}

int main()
{
	//path = "/home/", => "/home"
	//path = "/a/./b/../../c/", => "/c"
	//string path = "/home/";
	string path = "/a/./b/../../c/";
	cout << simplifyPath(path) << endl;

    return 0;
}

2、石块向下掉落

/********************石块向下掉落******************/
#include <iostream>
#include <vector>
#include <string>

using namespace std;

void stoneFalling(vector<string> &vec)
{
	int N, M;
	cin >> N >> M;
	//vector<string> vec;

	for (int i = 0; i < N; i++)
	{
		string s;
		cin >> s;

		vec.push_back(s);
	}

	for (int j = 0; j < M; j++)
	{
		int i = N - 1;
		for (; i >= 0; i--)
		{
			if (vec[i][j] != 'x')
				vec[i][j] = '.';
			else
				break;
		}
		int k = i - 1;
		for (int m = i - 1; m >= 0; m--)
		{
			if (vec[m][j] == 'o' && vec[k][j] == '.')
			{
				vec[k--][j] = vec[m][j];
				vec[m][j] = '.';
			}
			else if (vec[m][j] == 'x')
				k = m - 1;
			else if (vec[k][j] == 'o')
			{
				k--;
			}
		}
	}

	for (int i = 0; i < N; i++)
	{
		cout << vec[i] << endl;
	}
}

int main()
{
    vector<string> P = { "ooxo", "oox.", ".x.o", "xooo"};
    stoneFalling(P);
    return 0;
}

3、最大连续子数组

/*********************最大连续子数组********************/
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int getMaxConArray(vector<int> & array)
{
	if (array.empty())
		return 0;

	int len = array.size();
	int sum = array[0];
	int thisSum = array[0];
	for (int i = 1; i < len; ++i)
	{
		thisSum = max(thisSum + array[i], array[i]);
		if (sum < thisSum)
			sum = thisSum;
	}
	return sum;
}

int main()
{
	vector<int> A = { 1, -2, 3, 5, -3, 2 };		//输出8
	vector<int> B = { 0, -2, 3, 5, -1, 2 };		//输出9
	vector<int> C = { -9, 
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值