2022年5月24日每日一题:有哪些经典搜索算法的实例?
- 内容介绍
- 文章标签
- 相关推荐
本文共计680个文字,预计阅读时间需要3分钟。
题目:给定一个文件目录,统计该目录下所有文件的个数并返回,分析这道题目的难度
分析:这道题目相对容易想到,涉及到文件系统的操作。具体来说,我们需要:
1.确定文件目录的路径
2.统计该目录下所有文件的个数
3.分析题目,思考如何进行深搜或广搜
4.了解文件操作的API
解答:以下是使用Python编写的代码示例:
python
import osdef count_files(path): count=0 for root, dirs, files in os.walk(path): for file in files: count +=1 return count
假设给定目录为 /path/to/directorydirectory_path=/path/to/directoryfile_count=count_files(directory_path)print(文件个数:, file_count)
总结:这道题目主要考察了文件系统操作和搜索算法。在实际面试中,这类题目往往要求我们不仅要给出代码,还要分析代码的复杂度和优化策略。
题目给定一个文件目录的路径,统计这个目录下所有的文件数并返回
分析这道题很容易想到深搜或者广搜,不仅考察了对搜索算法的应用,还考察了对文件的操作,这道题在面试的时候还是很常见的
直接看代码吧,边看注释边讲。
深度搜素:
public static int dfs(String folderPath) {
File root = new File(folderPath);
// 如果传过来的参数不是目录,直接返回 0
if (!root.isDirectory()) {
return 0;
}
// 如果传过来的路径是一个文件,直接返回 1
if (root.isFile()) {
return 1;
}
// 创建一个栈,把传过来的目录入栈
Stack<File> stack = new Stack<>();
stack.push(root);
int files = 0;
while (!stack.isEmpty()) {
File folder = stack.pop();
// 去遍历目录下的所有文件
for (File file : folder.listFiles()) {
// 如果 file 是目录就入栈,是文件就 files++
if (file.isDirectory()) {
stack.push(file);
} else if (file.isFile()) {
files++;
}
}
}
return files;
}
广度搜索:
public static int bfs(String folderPath) {
File root = new File(folderPath);
// 如果传过来的参数不是目录,直接返回 0
if (!root.isDirectory()) {
return 0;
}
// 如果传过来的路径是一个文件,直接返回 1
if (root.isFile()) {
return 1;
}
// 创建一个队列
Deque<File> queue = new LinkedList<>();
queue.add(root);
int files = 0;
// 遍历队列
while (!queue.isEmpty()) {
// 从队头取出一个 folder
File folder = queue.pollFirst();
// 遍历这个 folder 的子目录,是目录就加到队尾,是文件 files++
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
queue.addLast(file);
} else if (file.isFile()) {
files++;
}
}
}
return files;
}
本文共计680个文字,预计阅读时间需要3分钟。
题目:给定一个文件目录,统计该目录下所有文件的个数并返回,分析这道题目的难度
分析:这道题目相对容易想到,涉及到文件系统的操作。具体来说,我们需要:
1.确定文件目录的路径
2.统计该目录下所有文件的个数
3.分析题目,思考如何进行深搜或广搜
4.了解文件操作的API
解答:以下是使用Python编写的代码示例:
python
import osdef count_files(path): count=0 for root, dirs, files in os.walk(path): for file in files: count +=1 return count
假设给定目录为 /path/to/directorydirectory_path=/path/to/directoryfile_count=count_files(directory_path)print(文件个数:, file_count)
总结:这道题目主要考察了文件系统操作和搜索算法。在实际面试中,这类题目往往要求我们不仅要给出代码,还要分析代码的复杂度和优化策略。
题目给定一个文件目录的路径,统计这个目录下所有的文件数并返回
分析这道题很容易想到深搜或者广搜,不仅考察了对搜索算法的应用,还考察了对文件的操作,这道题在面试的时候还是很常见的
直接看代码吧,边看注释边讲。
深度搜素:
public static int dfs(String folderPath) {
File root = new File(folderPath);
// 如果传过来的参数不是目录,直接返回 0
if (!root.isDirectory()) {
return 0;
}
// 如果传过来的路径是一个文件,直接返回 1
if (root.isFile()) {
return 1;
}
// 创建一个栈,把传过来的目录入栈
Stack<File> stack = new Stack<>();
stack.push(root);
int files = 0;
while (!stack.isEmpty()) {
File folder = stack.pop();
// 去遍历目录下的所有文件
for (File file : folder.listFiles()) {
// 如果 file 是目录就入栈,是文件就 files++
if (file.isDirectory()) {
stack.push(file);
} else if (file.isFile()) {
files++;
}
}
}
return files;
}
广度搜索:
public static int bfs(String folderPath) {
File root = new File(folderPath);
// 如果传过来的参数不是目录,直接返回 0
if (!root.isDirectory()) {
return 0;
}
// 如果传过来的路径是一个文件,直接返回 1
if (root.isFile()) {
return 1;
}
// 创建一个队列
Deque<File> queue = new LinkedList<>();
queue.add(root);
int files = 0;
// 遍历队列
while (!queue.isEmpty()) {
// 从队头取出一个 folder
File folder = queue.pollFirst();
// 遍历这个 folder 的子目录,是目录就加到队尾,是文件 files++
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
queue.addLast(file);
} else if (file.isFile()) {
files++;
}
}
}
return files;
}

