用友软件的两道笔试题(找最大文件和倒水问题)

本文介绍了一种使用Java编程语言查找指定目录下最大文件的方法,并提供了一个解决两个不同容量容器如何得到特定水量的问题的算法实现。

题目比较基础,不是很难,但也有很多需要注意的地方,先看题目吧:

1.找出目录中最大的文件。(目录中可能会有子目录)

2.有两个大小分别为m,nL的容器,如何获得xL的水?

package others;
import java.io.File;
import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
//找出目录中最大的文件
public class FileManager {
	Map<String,Long> fileMap=new HashMap();//保存文件的路径及对应的文件大小 	
	public void getMaxSizeFile(String path){	
		File file=new File(path);
		if(file.isDirectory()){
			bianli(file);//通过遍历把文件路径及对应大小保存到fileMap中
		}else System.out.println("the path should be a directory!");
		
		Long maxSize=0L;//文件最大值
		List result=new ArrayList();//保存结果 ,最大的文件可能不止一个
		for(Iterator it=fileMap.entrySet().iterator();it.hasNext();){
			Entry en=(Entry) it.next();
			Long size=(Long) en.getValue();
			if(size>=maxSize){
				if(size!=maxSize)result.clear();;
				maxSize=size;
				result.add(en.getKey());
			}
		}
		for(Iterator it=result.iterator();it.hasNext();)
			System.out.println(it.next());
	}	

	private void bianli(File file) {
		// TODO Auto-generated method stub
		File[] files=file.listFiles();
		if(files==null)return;		
		for(File f:files){
			if(f.isDirectory())bianli(f);
			else {				
				fileMap.put(f.getAbsolutePath(), f.length());
			}
		
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileManager manager=new FileManager();
		long start=System.currentTimeMillis();
		manager.getMaxSizeFile("C:\\");
		System.out.println("花费:"+(System.currentTimeMillis()-start));
	}
}

 

第一种思路是用一个map先把所有的文件名和大小保存起来,再从中找最大值,写的过程中就想到可以不用map,直接用一个中间变量保存最大值,效率会高些。但最后测试的结果表示,效率并没提高多少,当然空间肯定是节省了。

package others;
import java.io.File;
import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
//找出目录中最大的文件
public class FileManager2 {
	Long max=0L;
	ArrayList result=new ArrayList();
	
	public void getMaxSizeFile(String path){	
		File file=new File(path);
		if(file.isDirectory()){
			bianli(file);//通过遍历把文件路径及对应大小保存到fileMap中
		}else System.out.println("the path should be a directory!");		
		for(Iterator it=result.iterator();it.hasNext();)
			System.out.println(it.next());
	}	

	private void bianli(File file) {
		// TODO Auto-generated method stub
		File[] files=file.listFiles();
		if(files==null)return;	
		for(File f:files){
			if(f.isDirectory())bianli(f);
			else {				
				if(f.length()>max){
					max=f.length();
					result.clear();
					result.add(f.getAbsolutePath());
				}else if(f.length()==max)result.add(f.getAbsolutePath());
			}
		
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileManager manager=new FileManager();
		long start=System.currentTimeMillis();
		manager.getMaxSizeFile("C:\\");
		System.out.println("花费:"+(System.currentTimeMillis()-start));
	}

}

 

第二题有很多需要注意的地方,可以看注释

 

package others;

/**
 * 有两个大小分别为m,nL的容器,如何获得xL的水? 如4,3 2 
 */
public class WaterTest {

	private int i=1;//倒水次数记数	

	public  boolean doWater(int m, int n, int x) {
		int left, right;
		if (x > m + n || (m == n && m != x)) {
			System.out.println("can't get " + x + "L water");
			return false;
		}
		left = m;// M杯剩余水量
		System.out.println(i+++":M杯倒满:" + m + "L水");
		if (left == x)
			return true;
		right = n;// N杯空余空间
		while (right > 0) {			
			left = m - right;// 左边还剩多少水
			System.out.println(i+++":从M杯倒" + right + "L水到N杯中,最后M杯中剩" + left + "L水");
			if (left == x)
				return true;

			while (left > right) {
				System.out.println(i+++":把N杯中的水全问倒掉");
				right = n;
				System.out.println(i+++":把M杯中剩下的" + left + "L水倒满N杯,M杯中还剩余水"
						+ (left - n) + "L");
				left = left - n;
				if (left == x)
					return true;
			}

			System.out.println(i+++":把N杯中的水全问倒掉");
			right = n - left;
			System.out.println(i+++":把M杯中剩下的" + left + "L水倒到N杯中,N杯剩余空间" + right
					+ "L");
			left = m;
			System.out.println(i+++":M杯倒满:"+m+"L水");
			// right=left<right?n-left:left-n;//右边还剩多少空间

			if (n == (right + x))
				return true;
		}
		return false;
	}
	
	public static void main(String[] args) {
		// 10,4,3 false
		// 4,3,2 true
		// 20,3,2 true
		//20,7,5 true
		WaterTest test=new WaterTest();
		if (test.doWater(20,7,5)) {
			System.out.println("胜利完成!");
		} else
			System.out.println("不能实现!");
	}
}

 

基于TROPOMI高光谱遥感仪器获取的大气成分观测资料,本研究聚焦于大气污染物一氧化氮(NO₂)的空间分布与浓度定量反演问题。NO₂作为影响空气质量的关键指标,其精确监测对环境保护与大气科学研究具有显著价值。当前,利用卫星遥感数据结合先进算法实现NO₂浓度的高精度反演已成为该领域的重要研究方向。 本研究构建了一套以深度学习为核心的技术框架,整合了来自TROPOMI仪器的光谱辐射信息、观测几何参数以及辅助气象数据,形成维度特征数据集。该数据集充分融合了不同来源的观测信息,为深入解析大气中NO₂的时空变化规律提供了数据基础,有助于提升反演模型的准确性与环境预测的可靠性。 在模型架构方面,项目设计了一种分支神经网络,用于分别处理光谱特征与气象特征等模态数据。各分支通过独立学习提取代表性特征,并在深层网络中进行特征融合,从而综合利用不同数据的互补信息,显著提高了NO₂浓度反演的整体精度。这种源信息融合策略有效增强了模型对复杂大气环境的表征能力。 研究过程涵盖了系统的数据处理流程。前期预处理包括辐射定标、噪声抑制及数据标准化等步骤,以保障输入特征的质量与一致性;后期处理则涉及模型输出的物理量转换与结果验证,确保反演结果符合实际大气浓度范围,提升数据的实用价值。 此外,本研究进一步对不同功能区域(如城市建成区、工业带、郊区及自然背景区)的NO₂浓度分布进行了对比分析,揭示了人类活动与污染物空间格局的关联性。相关结论可为区域环境规划、污染管控政策的制定提供科学依据,助力大气环境治理与公共健康保护。 综上所述,本研究通过融合TROPOMI高光谱数据与模态特征深度学习技术,发展了一套高效、准确的大气NO₂浓度遥感反演方法,不仅提升了卫星大气监测的技术水平,也为环境管理与决策支持提供了重要的技术工具。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值