华为笔试4.29

今晚华为的三道笔试题本菜鸡居然都做出来了,开始膨胀
人生第一次啊
我是java写的哈。

我的题目是
获取字符串排列组合数量
删除字符 加密
还有约会城市道路硬币啥的

题目可能不一样,嗨呀

第一题思路:
map存每个字符出现数量。
然后字符数量的阶乘除以每个字符数量的阶乘
比如 aabbbcccc
答案:9!/2!/3!/4!
private static int getNum(char[] ch) {
		Map<Character,Integer> map=new HashMap<Character,Integer>(8);
		for(int i=0;i<ch.length;i++){
			if(map.containsKey(ch[i])){
				int value=map.get(ch[i]);
				map.put(ch[i], value+1);
			}else{
				map.put(ch[i], 1);
			}
		}
		int len=ch.length;
		int res=1;
		while(len!=1){
			res=res*len;
			len--;
		}
		for(Character c:map.keySet()){
			int value=map.get(c);
			while(value!=1){
				res=res/value;
				value--;
			}
			
		}
		return res;
	}


第二题思路:
循环k次删k个字母,
每次循环比较相邻两个,前一个大就删除前一个,比如bca,就删除c
如果某次没有删除 说明字母从小到大排列,比如aabbcc,那直接从后往前删就行了。
private static void getAnswer(String str, int k) {
		ArrayList<Character> list=new ArrayList<Character>();
		for(int i=0;i<str.length();i++){
			list.add(str.charAt(i));
		}
		int size=list.size();
		int nn=0;
		boolean flag=false;
		for(int i=0;i<k;i++){
			
			for(int j=0;j<list.size()-1;j++){
				if(list.get(j)>list.get(j+1)){
					list.remove(j);
					break;
				}
				
			}
			nn=i;
			if(list.size()==size-i){
				flag=true;
				break;
			}
		}
		if(flag){
			for(int i=nn;i<k;i++){
				list.remove(list.get(list.size()-1));
			}
		}
		for(int i=0;i<list.size();i++){
			System.out.print(list.get(i));
		}
		
		
	}


第三题思路:
遍历路径,找到源城市和当前(传入参数start)相同的道路,同时判断钱够不够用,够的就递归(硬币数量减少,道路长度增加,当前城市改变)
记录每次最小路径值,返回
/**
k硬币数量
n城市数量
r道路数量
arr数组
start当前城市
l当前路径
*/
private static int getAnswer(int k, int n, int r, int[][] arr, int start, int l) {
		if (start == n) {
			return l;
		}
		int min = Integer.MAX_VALUE;
		int temp = -1;
    
		for (int i = 0; i < r; i++) {
			if (arr[i][0] == start && arr[i][3] <= k) {
				temp = getAnswer(k - arr[i][3], n, r, arr, arr[i][1], l + arr[i][2]);
			}
			if (min >= temp && temp != -1) {
				min = temp;
			}
		}
		if (min != Integer.MAX_VALUE) {
			return min;
		}
		return -1;
	}        


也不知道有没有说明白,嗨呀我尽力了。。

我好像没碰到90的情况,捂脸,可能运气太好了

代码可以私信加微信发哈
#华为#
全部评论
- - 第三题 300分,什么dijkstra和floyed我全都忘了。。。 然后我写了半天最后只能灵机一动print(-1)  对了22.2%🤣
2 回复 分享
发布于 2020-04-29 21:07
哈哈,同样的一套,0.8 1 1
2 回复 分享
发布于 2020-04-29 22:59
老哥能分享以下代码吗。。第一题只过了90.找不到原因,头大
点赞 回复 分享
发布于 2020-04-29 20:38
..带佬。我第二题没来及看....第一题为啥总是90%啊
点赞 回复 分享
发布于 2020-04-29 21:00
大佬,分享下第二题的解题思路呗
点赞 回复 分享
发布于 2020-04-29 21:02
作对前两题,第三题路径出来了没来得及处理路途那些...
点赞 回复 分享
发布于 2020-04-29 21:03
我也是这套,但我0.9 0.2 1。第一题超时,第二题我不懂为什么呀
点赞 回复 分享
发布于 2020-04-29 21:03
第三道题是不是两城市之间有多重路径?只a了60%
点赞 回复 分享
发布于 2020-04-29 21:04
1&nbsp;2都是90%&nbsp;求问哪里有坑吗
点赞 回复 分享
发布于 2020-04-29 21:08
为啥我的是三道斐波那契数列呢,你们是什么岗啊
点赞 回复 分享
发布于 2020-04-29 21:08
我好像也是这套 1-0.9-1 第一题 用数学方法 第二题 贪心 第三题 暴力搜
点赞 回复 分享
发布于 2020-04-29 21:08
第二题只有0.9,求大佬分享一下哪有坑呀
点赞 回复 分享
发布于 2020-04-29 21:10
第一题无论是数学方法还是常规方法都是90....总的来说这三题还是挺简单的
点赞 回复 分享
发布于 2020-04-29 21:11
第二题90%是因为啥呀??
点赞 回复 分享
发布于 2020-04-29 21:13
第二题 直接取k后面的字符 过了40% 我惊呆了。。。 不过还是没啥用
点赞 回复 分享
发布于 2020-04-29 21:20
求问第三题什么思路啊
点赞 回复 分享
发布于 2020-04-29 21:22
大佬,解释一下第三题哦
点赞 回复 分享
发布于 2020-04-29 21:25
两个90,第二个我用的栈
点赞 回复 分享
发布于 2020-04-29 21:30
点赞 回复 分享
发布于 2020-04-30 10:58
同卷子0.9 0.7 1第一题卡了好久都是0.9😂
点赞 回复 分享
发布于 2020-04-30 13:38

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
14 39 评论
分享
牛客网
牛客企业服务