微软面试100题-天天做-第6题

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

第6题(数组)
腾讯面试题: 
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数 
要求下排每个数都是先前上排那十个数在下排出现的次数。 
上排的十个数如下: 
【0,1,2,3,4,5,6,7,8,9】

举一个例子, 
数值: 0,1,2,3,4,5,6,7,8,9 
分配: 6,2,1,0,0,0,1,0,0,0 
0在下排出现了6次,1在下排出现了2次, 
2在下排出现了1次,3在下排出现了0次.... 
以此类推..

 

这道题真抓狂啊

 

package com.microsoft;

public class UpDownCount {
	private Measure[][]momery;
	private int[]data;
	private int []solve;
	public UpDownCount(int []data){
		this.data=data;
		this.solve=new int[data.length];
		this.momery=new Measure[data.length][data.length];
		for(int i=0;i<momery.length;i++){
			for(int j=0;j<momery[i].length;j++){
				momery[i][j]=null;
			}
		}
	}
	
	public void solve(){
		Measure m=new Measure();
		m.multipySum=data.length;
		m.rowSum=data.length;
		System.out.println(solve(0,data.length-1,m,0));
		for(int i=0;i<solve.length;i++){
			System.out.print(solve[i]+" ");
		}
	}
	public boolean solve(int start,int end,Measure m,int lever){
		if(start>end){
			return false;
		}
		if(m.rowSum<0||m.multipySum<0){
			return false;
		}
		if(start==end){
			for(int i=data.length-1;i>=0;i--){
				solve[start]=data[i];
				int tmp=m.rowSum;
				if(tmp*data[start]==m.multipySum&&solve[start]==m.rowSum){
					//System.out.println(111);
					boolean countOk=true;
					for(int j=0;j<data.length;j++){
						if(count(data[j])!=solve[j]){
							countOk=false;
						}
					}
					//for(int a=0;a<solve.length;a++){
					//	System.out.print(solve[a]+" ");
					//}
					//System.out.println();
					//System.out.println(countOk);
					return countOk;
				}
			}
			return false;
		}else{
			for(int i=data.length-1;i>=0;i--){
				solve[start]=data[i];
				int prefix=0;
				for(int k=0;k<start;k++){
					prefix+=solve[k];
				}
				if(prefix>data.length){
					return false;
				}
				Measure measure=new Measure();
				measure.multipySum=m.multipySum-solve[start]*data[start];
				measure.rowSum=m.rowSum-solve[start];
				
				boolean s=solve(start+1,end,measure,lever+1);
				if(!s){
					continue;
				}
				int sum=0;
				int multiSum=0;
				for(int j=start;j<=end;j++){
					sum+=solve[j];
					multiSum+=solve[j]*data[j];
				}
				
				boolean countOk=true;
				if(lever==0){
					if(multiSum==m.multipySum&&sum==m.rowSum){
						for(int j=start;j<end;j++){
							if(count(data[j])!=solve[j]){
								countOk=false;
							}
						}
					}else{
						countOk=false;
					}
				}
				if(s){
					if(lever==0&&countOk){
						return true;
					}else if(lever==0){
						continue;
					}
					return true;
				}
				
			}
			return false;
		}
	}
	
	private int count(int value){
		int count=0;
		for(int i=0;i<solve.length;i++){
			if(solve[i]==value){
				count++;
			}
		}
		return count;
	}
	
	private class Measure{
		private int rowSum;
		private int multipySum;
	}
	public static void main(String[] args) {
		int[] data=new int[]{0,1,2,3,4,5,6,7,8,9};
		UpDownCount cunt=new UpDownCount(data);
		cunt.solve();
	}

}

效率很低,但是能解决问题

 

package com.microsoft;

public class UpDownCount {
	private Measure[][]momery;
	private int[]data;
	private int []solve;
	public UpDownCount(int []data){
		this.data=data;
		this.solve=new int[data.length];
		this.momery=new Measure[data.length][data.length];
		for(int i=0;i<momery.length;i++){
			for(int j=0;j<momery[i].length;j++){
				momery[i][j]=null;
			}
		}
	}
	
	public void solve(){
		Measure m=new Measure();
		m.multipySum=data.length;
		m.rowSum=data.length;
		System.out.println(solve(0,data.length-1,m,0));
		for(int i=0;i<solve.length;i++){
			System.out.print(solve[i]+" ");
		}
	}
	public boolean solve(int start,int end,Measure m,int lever){
		if(start>end){
			return false;
		}
		if(m.rowSum<0||m.multipySum<0){
			return false;
		}
		if(start==end){
			for(int i=data.length-1;i>=0;i--){
				solve[start]=data[i];
				int tmp=m.rowSum;
				if(tmp*data[start]==m.multipySum&&solve[start]==m.rowSum){
					boolean countOk=true;
					for(int j=0;j<data.length;j++){
						if(count(data[j])!=solve[j]){
							countOk=false;
						}
					}
					return countOk;
				}
			}
			return false;
		}else{
			for(int i=data.length-1;i>=0;i--){
				solve[start]=data[i];
				int prefix=0;
				for(int k=0;k<start;k++){
					prefix+=solve[k];
				}
				if(prefix>data.length){
					return false;
				}
				Measure measure=new Measure();
				measure.multipySum=m.multipySum-solve[start]*data[start];
				measure.rowSum=m.rowSum-solve[start];
				
				boolean s=solve(start+1,end,measure,lever+1);
				if(!s){
					continue;
				}
				return s;
				
			}
			return false;
		}
	}
	
	private int count(int value){
		int count=0;
		for(int i=0;i<solve.length;i++){
			if(solve[i]==value){
				count++;
			}
		}
		return count;
	}
	
	private class Measure{
		private int rowSum;
		private int multipySum;
	}
	public static void main(String[] args) {
		int[] data=new int[]{0,1,2,3,4,5,6,7,8,9};
		UpDownCount cunt=new UpDownCount(data);
		cunt.solve();
	}

}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值