百度研发工程师面试技巧与答案.docxVIP

  • 0
  • 0
  • 约5千字
  • 约 13页
  • 2026-02-02 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年百度研发工程师面试技巧与答案

一、编程题(共3题,每题20分,总分60分)

题目1(Python编程题,20分):

编写一个函数,输入一个整数列表,返回列表中所有可能的子集(不包含空集)。子集的顺序不重要,但每个子集内部的顺序要保持与原列表一致。例如,输入`[1,2,3]`,输出应为`[[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]`。

答案:

python

defsubsets(nums):

res=[]

subset=[]

defbacktrack(index):

res.append(subset.copy())

foriinrange(index,len(nums)):

subset.append(nums[i])

backtrack(i+1)

subset.pop()

backtrack(0)

returnres

示例

print(subsets([1,2,3]))

解析:

-使用回溯算法(递归),每次固定一个元素,然后递归遍历剩余元素,直到所有元素被遍历完。

-`subset`用于记录当前子集,`res`用于存储所有子集。

-每次递归时,从`index`开始遍历,避免重复子集且保持顺序一致。

题目2(Java编程题,20分):

实现一个无重复数字的排列算法,输入一个整数数组,返回所有可能的排列。例如,输入`[1,2,3]`,输出应为`[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]`。

答案:

java

importjava.util.ArrayList;

importjava.util.List;

publicclassPermutations{

publicListListIntegerpermute(int[]nums){

ListListIntegerres=newArrayList();

boolean[]used=newboolean[nums.length];

backtrack(nums,newArrayList(),used,res);

returnres;

}

privatevoidbacktrack(int[]nums,ListIntegerpath,boolean[]used,ListListIntegerres){

if(path.size()==nums.length){

res.add(newArrayList(path));

return;

}

for(inti=0;inums.length;i++){

if(used[i])continue;

used[i]=true;

path.add(nums[i]);

backtrack(nums,path,used,res);

path.remove(path.size()-1);

used[i]=false;

}

}

//示例

publicstaticvoidmain(String[]args){

Permutationsp=newPermutations();

System.out.println(p.permute(newint[]{1,2,3}));

}

}

解析:

-使用回溯算法,每次选择一个未被使用的数字,然后递归继续选择,直到排列完整。

-`used`数组用于标记数字是否已被使用,避免重复排列。

-`path`记录当前排列,每次递归时添加一个数字,回溯时移除该数字。

题目3(C++编程题,20分):

给定一个字符串`s`和一个目标字符串`target`,统计`s`中包含`target`的所有子串的数量(不区分顺序)。例如,`s=abcabc,target=abc`,输出应为`4`(子串为abc,bca,cab,abc)。

答案:

cpp

includeiostream

includestring

includeunordered_map

usingnamespacestd;

intcountSubstrings(strings,stringtarget){

if(target.size()s.size())return0;

unordered_mapchar,inttargetCount,windowCount;

for(charc:target)ta

文档评论(0)

1亿VIP精品文档

相关文档