远景面试算法题——FolderSize
描述
文件被存储在磁盘上的时候,通常为cluster方式。每个cluster具有固定的大小,一个文件所消耗的空间量始终是cluster大小的整数倍。因此,如果cluster的大小为100字节,165字节的文件将会使用实际使用200字节的存储空间,造成35个空间的浪费。
一个folder会有多个file,每个file单独计算浪费空间;如果某个folder没有出现,浪费空间为0
定义
Method signature: int[] calculateWaste(String[] files, int folderCount,int clustersize)
输入参数说明:
files为输入的folder编号和对应的file大小的数组。例如{"0 55","0 47"},表示为folder 0 下面有两个文件,大小分别为55和47,按空格分隔。
folderCount为所有的folder个数。当folderCount为3的时候,会有0,1,2三个folder编号,clustersize为固定块大小。
返回值:每个folder对应的浪费空间大小
测试用例
files={"0 55","0 47","1 22","1 21"}。foldercount=3,clustersize=50
Returns:{48,57,0}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解题之前先安利两首歌《安河桥》《七月上》
今天面试之前包夜导致自己两眼昏花,看题目费解到半死(我发四我再也不会包夜了!)。让20min写出来,后来发现其实并不难。当然代码是否有误还要斟酌
核心:把字符串转换成数字
int * calculateWaste(string* files,int folderCount,int clustersize){
int* waste=new int[folderCount];
int filenum=sizeof(files)/sizeof(files[]);
int folderid=,filesize=;
string temp;
if(files==NULL||folderCount==||clustersize==){
cout<<"参数错误"<<endl;
return waste;
}
for(int i=;i<filenum;i++){
temp=files[i];
int j=;
while(temp[j]!=' '){ //计算folderID
folderid=folderid*+temp[j]-'';
j++;
}
j++; //跳跃空格
while(j<temp.length()){
filesize=filesize*+temp[j]-'';
j++;
}
waste[folderid]+=(filesize/clustersize+)*clustersize-filesize;
folderid=;
filesize=; //再次扫描下一个file前清空之前的数据
}
return waste;
}
代码如上。为了面试官看的清楚,我还从新誊写了一份,然而···不说了。
关于这道题和同学讨论了一下:
1.要不要释放内存,事实上,是不用的。因为返回的内存必然是有用的,你以后要用的,所以不需要释放内存。当程序运行完毕,系统会为你做这个释放。
那关于动态申请的内存一定要记得释放是用于什么情况呢?在类中,如果你定义一个类,类中有动态申请的内存,在你的析构函数里一定要释放内存。(不知道我这种观点是否有误?)
2.还有关于string [] files,我用sizeof(files)/sizeof(files[0])这种方法求数组长度是基于每个元素是等长的,那如果string数组不等长了我要怎么求得长度呢?这个时候应该给出【长度参数】
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
面试的时候有些问题我真的没有考虑过,所以答的并不好:
1.为什么考seu,意思是怎么没保研
2.为什么不继续做QA(QA事实上也很难,也要求很高的技术,TDD--Testing Driven Develope)
3.自己写的算法代码一定要将细一点,最好分【多个函数】完成功能
4.BAT投了吗,结果如何(内心OS:这种问题我真的不知道怎么回答啊!!)
远景面试算法题——FolderSize的更多相关文章
- python经典面试算法题1.4:如何对链表进行重新排序
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.4 对链表按照如下要求重新排序 [微软笔试题] 难度系数: ...
- 合并K个有序数组(链表)【字节跳动面试算法题】
本题是本人字节跳动一面考的算法题原题是有序数组,一时没想到怎么解决数组的问题,但是如果给的是有序链表数组,则可以用下面的方法解决 可以利用最小堆完成,时间复杂度是O(nklogk),具体过程如下: 创 ...
- python经典面试算法题1.3:如何计算两个单链表所代表的数之和
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.2 如何实现链表的逆序 [华为笔试题] 难度系数:⭐⭐⭐ ...
- python经典面试算法题1.2:如何从无序链表中移除重复项
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.2 如何实现链表的逆序 [蚂蚁金服面试题] 难度系数:⭐⭐ ...
- python经典面试算法题4.1:如何找出数组中唯一的重复元素
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. [百度面试题] 难度系数:⭐⭐⭐ 考察频率:⭐⭐⭐⭐ 题目描述 ...
- python经典面试算法题1.1:如何实现链表的逆序
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.1 如何实现链表的逆序 [腾讯笔试题] 难度系数:⭐⭐⭐ ...
- 19道常见的JS面试算法题
最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...
- 常见面试算法题JS实现-设计一个有getMin功能的栈
前言: 已经确定工作了-下周一正式入职,按理说应该是可以好好浪荡一周的,但是内心总是不安,总觉得自己这个水平真的太菜了,还是趁着现在有自己的时间,赶紧多看看书,多学习学习吧orz所以把之前校招买的书, ...
- leetcode:Minimum Path Sum(路线上元素和的最小值)【面试算法题】
题目: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right w ...
随机推荐
- CentOS6.4虚拟机设置固定IP、安装JDK、Tomcat、Redis并部署web项目
一.CentOS设置固定IP 1.直接修改配置文件的方式,原文地址:http://www.cnblogs.com/zhja/p/3964159.html (1)首先获取你的GATEWAY 方便后面在c ...
- [基础架构]PeopleSoft Application Server 重要文件说明
我们都知道PeopleSoft是由几个不同的服务组成的,他们在PeopleSoft体系结构中扮演着自己的角色.这些服务具有不同的文件结构并包含重要的可执行文件和配置文件. 以下是Peoplesoft体 ...
- 测试框架:使用SONAR分析代码质量
介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd.checkstyl ...
- for(int a:i)在java 编程中的使用
这种有冒号的for循环叫做foreach循环,foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本 ...
- JVM常见垃圾回收算法
jdk1.7.0_79 众所周知,Java是一门不用程序员手动管理内存的语言,全靠JVM自动管理内存,既然是自动管理,那必然有一个垃圾内存的回收机制或者回收算法.本文将介绍几种常见的垃圾回收(下文简称 ...
- EventBus 事件总线之我的理解
用例:假设公司发布了一个公告 需要通过短信 和 邮件分别2种方式 通知员工 1:首先我们建立领域模型 /// <summary> /// 领域核心基类 /// </summary&g ...
- iOS 实现类似QQ分组样式的几种方式
思路 思路很简单,对模型数据操作或则控制界面显示 先看下json部分数据 "chapterDtoList": [{ "token": null, "i ...
- docker~写个容器启动的bash脚本
回到目录 bash脚本在linux里就相当于win里的bat和cmd及ps脚本,可以把一般指令组织在一起,统一去执行,比如我有一些docker容器需要统一去启动,这时,你可以把它们写成一个bash脚本 ...
- Selenium模拟JQuery滑动解锁
滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. https://www.helloweba.com/demo/2017 ...
- kevin的黎明十分
今天在搜索struts2的相关知识的时候,博客园让我提起了兴趣.其间看到了hongton同学的分享,感觉受益颇深!所以今天我加入了博客园,希望自己以后能在这个大家园中分享知识,收获人生! 即兴之下, ...