- 0
- 0
- 约5.83千字
- 约 17页
- 2026-02-02 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年华为软件开发面试宝典与答案详解
一、编程基础(5题,每题10分,共50分)
1.题目:
请用C语言实现一个函数,输入一个整数数组,返回数组中的最大值。要求:不能使用库函数,时间复杂度O(n)。
答案与解析:
c
intfindMax(intarr[],intn){
if(n=0)return-1;//边界处理
intmax=arr[0];
for(inti=1;in;i++){
if(arr[i]max){
max=arr[i];
}
}
returnmax;
}
解析:
-初始化最大值为数组第一个元素。
-遍历数组,每次比较当前元素与已知的最大值,更新最大值。
-时间复杂度O(n),空间复杂度O(1)。
-边界处理:空数组返回-1或特定值。
2.题目:
请用Java实现一个链表节点类`ListNode`,并实现删除链表中重复元素的函数,要求:不使用额外空间,时间复杂度O(n)。
答案与解析:
java
classListNode{
intval;
ListNodenext;
ListNode(intx){val=x;}
}
publicListNodedeleteDuplicates(ListNodehead){
if(head==null)returnnull;
ListNodecurrent=head;
while(current!=null){
ListNodenextDistinct=current.next;
while(nextDistinct!=nullnextDistinct.val==current.val){
nextDistinct=nextDistinct.next;
}
current.next=nextDistinct;
current=nextDistinct;
}
returnhead;
}
解析:
-使用双指针法:`current`指向当前不重复的节点,`nextDistinct`用于跳过重复节点。
-时间复杂度O(n),空间复杂度O(1)。
-链表头节点可能被删除,需返回新的头节点。
3.题目:
请用Python实现快速排序算法,输入一个列表,返回排序后的列表。要求:原地排序,不使用内置排序函数。
答案与解析:
python
defquicksort(arr):
iflen(arr)=1:
returnarr
pivot=arr[len(arr)//2]
left=[xforxinarrifxpivot]
middle=[xforxinarrifx==pivot]
right=[xforxinarrifxpivot]
returnquicksort(left)+middle+quicksort(right)
解析:
-选择中间值作为基准(pivot),将数组分为三部分:小于、等于、大于基准的子数组。
-递归对左右子数组排序,合并结果。
-时间复杂度平均O(nlogn),最坏O(n^2)。
-空间复杂度O(logn)(递归栈)。
4.题目:
请用JavaScript实现一个函数,检查一个字符串是否是回文,例如:madam返回`true`,hello返回`false`。要求:忽略大小写和空格。
答案与解析:
javascript
functionisPalindrome(s){
s=s.toLowerCase().replace(/\s+/g,);
letleft=0,right=s.length-1;
while(leftright){
if(s[left]!==s[right]){
returnfalse;
}
left++;
right--;
}
returntrue;
}
解析:
-去除字符串中的空格和大小写差异。
-双指针法:从两端向中间比较字符是否相同。
-时间复杂度O(n),空间复杂度O(1)。
5.题目:
请用C++实现一个函数,输入一个整数,返回其二进制表示中1的个数。要求:不使用库函数。
答案与解析:
cpp
intcountOnes(intnum){
intcount=0;
while(num!=0){
count+=num1;
num=1;
}
returncount;
}
解析:
-使用位运算:每次与1按位与,统计1的个数,然后右移一位。
-时间复杂度O(l
原创力文档

文档评论(0)