描述

文件被存储在磁盘上的时候,通常为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的更多相关文章

  1. python经典面试算法题1.4:如何对链表进行重新排序

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.4 对链表按照如下要求重新排序 [微软笔试题] 难度系数: ...

  2. 合并K个有序数组(链表)【字节跳动面试算法题】

    本题是本人字节跳动一面考的算法题原题是有序数组,一时没想到怎么解决数组的问题,但是如果给的是有序链表数组,则可以用下面的方法解决 可以利用最小堆完成,时间复杂度是O(nklogk),具体过程如下: 创 ...

  3. python经典面试算法题1.3:如何计算两个单链表所代表的数之和

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.2 如何实现链表的逆序 [华为笔试题] 难度系数:⭐⭐⭐ ...

  4. python经典面试算法题1.2:如何从无序链表中移除重复项

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.2 如何实现链表的逆序 [蚂蚁金服面试题] 难度系数:⭐⭐ ...

  5. python经典面试算法题4.1:如何找出数组中唯一的重复元素

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. [百度面试题] 难度系数:⭐⭐⭐ 考察频率:⭐⭐⭐⭐ 题目描述 ...

  6. python经典面试算法题1.1:如何实现链表的逆序

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.1 如何实现链表的逆序 [腾讯笔试题] 难度系数:⭐⭐⭐ ...

  7. 19道常见的JS面试算法题

    最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...

  8. 常见面试算法题JS实现-设计一个有getMin功能的栈

    前言: 已经确定工作了-下周一正式入职,按理说应该是可以好好浪荡一周的,但是内心总是不安,总觉得自己这个水平真的太菜了,还是趁着现在有自己的时间,赶紧多看看书,多学习学习吧orz所以把之前校招买的书, ...

  9. 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 ...

随机推荐

  1. python中json.loads,dumps,jsonify使用

    search_info = {'id':132,'user_role':3} print type(search_info) #输出 <type 'dict'> #转为string用dum ...

  2. 【Python3之多进程】

    一.进程和线程的简单解释 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 用生活举例: (转自阮一峰网络日志) 1.计算机的核心是CPU,它承担了所有 ...

  3. npm 的用法

    当用npm 安装依赖时如果加上  --save  就会自动把依赖模块添加到package.json中  别人下载时直接npm install 加载后就可以了

  4. 恐怖的ifdown eth0;0

    下午闲的蛋疼,随手给测试机配了个浮动地址eth0:0. ping了下OK,内网访问没问题. 准备收手的时候,瞄了一眼ifcfg-eth0:0的配置,发现广播地址BROADCAST写成了BOADCAST ...

  5. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  6. 关于华为P9手机的解锁、刷Recovery、获取Root、安装Busybox,以及升级降级的全过程(和一些错误的解决方法)

    我有一部华为P9手机,型号EVA-TL00,属于移动定制机.用了半年多了,想给手机添加一些功能,发现有些功能必须Root之后才能用代码实现,所以动了Root的打算. 一.手机解锁.(不解锁则无法对手机 ...

  7. hdu_5964:平行四边形

    打重现赛时,一点思路也没有,然后又看到这题AC数那么少,就直接放弃了.今天重新看了看,借鉴了下别人的,发现此题应该算是一道可解题. 看上去,这题的ans是同时有两个点作为自变量的函数(然而n^2复杂度 ...

  8. 前端框架之bootstrap

    一.bootstrap按钮 1.按钮 <button class="btn btn-default">按钮</button><button class ...

  9. Spring源码情操陶冶-AbstractApplicationContext#prepareRefresh

    前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-AbstractApplicationContext 约束: 本文指定contextClass为默认的XmlWebApplicati ...

  10. S2-032代码执行

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构差别 ...