快手笔试4.12(菜鸡求助)

这次的题是我做过所有笔试里感觉最友好的了!可是我!依然!不会敲!我不知道哪里有问题就是0通过!要么是我思路有问题,要么是我敲不出来,硬伤啊……
第一题通过了0.7,有没有大佬帮我瞅瞅问题在哪里呀😥
第二题我的思路是把十进制数字R转换成对应的N进制数字,如果N中只出现了数字1或者0,那么符合要求,输出所有数字1所在的位数-1就是答案。进制转换我一开始尝试用库函数,可是N的范围是1~1000,超出了库函数的范围,于是我定义了一个递归函数来计算进制转换,辗转相除留余数,可是我……失败了,不知道问题在哪里,最后用空vector骗了0.16
第三题我的思路是计算每个(ai-bi)的值,然后从小到大排序,这个就是所求的顺序。俺觉得问题的关键在于怎么记录(ai-bi)原始位置,好在排完序之后输出来。我尝试了两种方式,一种是用unordered_map记录,一种是重新定义一个数据结构里面包含差值val和原始位置num,可是我……两种方式都失败了
第四题一如既往没有看题……
欢迎讨论思路,贴个代码给俺学习学习,感谢大佬们!
下面这个是只过了0.7的第一题代码
#include<iostream>
using namespace std;
int main() {
	char c[100];
	cin >> c;
	int cp = 0, left = 0, right = 0;
	for (int i = 0; c[i] != '\0'; i++) {
		if (c[i] == '(')
			left++;
		if (c[i] == ')')
			right++;
	}
	for (int i = 0; c[i] != '\0'; i++) {
		if (c[i] == '(') {
			for (int j = 0; c[j] != '\0'; j++) {
				if (c[j] == ')' && (j - i > 0)) {
					cp++;
					left--;
					right--;
					break;
				}
			}
		}
	}
	cout << cp << ' ' << left << ' ' << right;
	return 0;
}



#快手笔试##快手##笔试题目#
全部评论
第三题 把公式化简 就是(ai-bi)*j + n*bi - ai 只需要比较前半部分,依照小的放后面原则,直接保留位置的情况下sort一下就可以了
2 回复 分享
发布于 2020-04-12 18:24
第一题和LeetCode第20差不多,用栈做。第二题我的思路是一直能除得进N的时候一直除,之后再减去这一个循环得到的一个完美数,在继续除N。
2 回复 分享
发布于 2020-04-12 18:35
第一题感觉咱俩思路一样,我过了0.9
1 回复 分享
发布于 2020-04-12 18:19
第一题就是有左括号,l++,有右括号时r++,且做一个判断,如果l>0;l--;r--;cp++就可以
1 回复 分享
发布于 2020-04-12 18:21
第一题用栈,遇到(入栈,遇到)栈顶弹出一个如果是(匹配+1,不是的话)入栈,最后统一统计就行
1 回复 分享
发布于 2020-04-12 18:21
第一题老老实实用栈不好嘛
1 回复 分享
发布于 2020-04-12 18:22
我用js写的,100%,我的思想是用入栈出栈的思想(就是js的数组的push和pop)
1 回复 分享
发布于 2020-04-12 18:22
第三题可以把原始位置、ai、bi都先存储在一个struct里吧?
1 回复 分享
发布于 2020-04-12 18:23
第一道题我是有左括号left++,有右括号时检查left,如果left不等于0则left--,right不变,com++,left为0则right++
1 回复 分享
发布于 2020-04-12 18:23
第一题一样 python a了第一题 str1 = input() def count(s):     left_list = []     right_list = []     n=0     for item in s:         if item == '(':             left_list.append(item)         elif item == ')':             if len(left_list)==0:                 right_list.append(item)             else:                 left_list.pop()                 n+=1     print(n,len(left_list),len(right_list))      count(str1)
1 回复 分享
发布于 2020-04-12 18:28
用个栈多香啊
1 回复 分享
发布于 2020-04-12 18:28
你不是一个人
1 回复 分享
发布于 2020-04-12 18:28
第三题我用了运算符重载,其实就是相当于定义个比较函数 struct node{     int number;     int ai;     int bi;     bool operator <(const node &tmp)const{         return bi + tmp.ai < ai + tmp.bi;     } }; vector<int> WaitInLine(vector<int>& a, vector<int>& b) {     int len = a.size();     vector<node> v1(len);     for(int i = 1; i <= len; i++)         v1[i-1] = {i, a[i-1], b[i-1]};     sort(v1.begin(), v1.end());          vector<int> ans;     for(int i = 0; i < v1.size(); i++)         ans.push_back(v1[i].number);     return ans; }
1 回复 分享
发布于 2020-04-12 18:31
第二题我是从小于R的N的最大次方开始,用R减N的最大次方,用一个链表记录指数,每次指数减1,直到R等于0,则返回链表,否则返回空数组,对了,如果R=1就直接返回[0]就好了。 第三题,我用的是Java,用的TreeMap存储ai-bi和i,然后按序输出i。 第三题建一个同样大小的布尔数组,然后从左到右从上到下,扫一遍就好了,判断一下上下左右四个位置的布尔值。 一个月前的华为只a了一道最简单的,今天四道全a了,算法渣渣感动不已🤣
1 回复 分享
发布于 2020-04-12 18:31
你第一题的思路问题出在 一个)可以和前面所有的(成对    被重复算了
1 回复 分享
发布于 2020-04-12 18:36
又看到你了
点赞 回复 分享
发布于 2020-04-12 18:39
第一题用栈,leetcode上有原题 第二题代码: vector<int> GetPowerFactor(int R, int N) { vector<int> res; if (N == 1) return res; int maxPower = 0; int div = R; while ((div /= N) > 0) { maxPower++; } div = R; for (int i = maxPower;i >= 0;--i) { int tmp = (int)pow(N, i); if (tmp == div) { res.push_back(i); div -= tmp; break; } else if (tmp < div) { res.push_back(i); div -= tmp; } } if (div != 0) { vector<int> res1; return res1; } int length = res.size(); for (int i = 0;i < (length >> 1);++i) { int tmp = res[i]; res[i] = res[length - 1 - i]; res[length - 1 - i] = tmp; } return res; } 第三题:用vector<pair<int,int>>第一位存储差值,第二位存索引索引,然后用sort,会先排序差值,再排序索引。 第四题没做完,不知道思路对不对,说一下我的思路欢迎大神指点,就是用图的深度优先遍历,每次遇到 '.' 对其进行dfs两次,第一次是把这个点设为可用,然后遍历后面隔一个点设为可用,第二次是第一个点不可用,后面第二个点可用,然后遍历下去,比较两次遍历可用点谁大。
点赞 回复 分享
发布于 2020-04-13 09:55
第四题我是这么做的,检测每一个.的上下左右有几个.作为权重记录下来,再根据权值从0到4,对数组遍历,上下左右没有# 的点改为#  本来想着随便做做的没想到A了...
点赞 回复 分享
发布于 2020-04-13 10:01

相关推荐

点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务