华为的笔试题

伯乐在线上看到华为的笔试题 http://group.jobbole.com/9866/#comment-31739


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <time.h>


#define LEN 100000 
#define debug 0
int arr1[LEN] = {42,13,42,88,23,15,2,13,34,16,2,34,6,45,68};
int arr2[LEN] = {12,80,44,52,43,25,42,33,4,6,1,76,24,40,1};
int sum1 =0;
int sum2 =0;


void print_arr(int *p, int len)
{
if(!debug)
return;
int i=0;
for(i=0;i<len;i++)
{
printf("%2d ", *(p+i));
}
printf("\n");


}
int getnearest(bool s1big, int diffTotal,int *zi, int *zj)
{
int nearestDiff = -1;
int tmp = 0;
int i,j;
for(i=0;i<LEN;i++)
{
for(j=0;j<LEN;j++)
{
tmp = (arr1[i]-arr2[j]);
if(abs(tmp) <=diffTotal/2)
{
if((s1big && tmp>0)||(s1big==false && tmp<0))
{
if(abs(tmp)>nearestDiff)
{
nearestDiff = abs(tmp);
*zi =i;
*zj =j;
if(nearestDiff>=diffTotal/2 || nearestDiff>=sum1/LEN)
return nearestDiff;

}
}
}


}
}
return nearestDiff;


}
int main()
{
int i ,j,diffTotal = 0;
int tmp=0;
int ave=0;


#if 0
for(i=0;i<LEN;i++)
{
for(j=9;j>i;j--)
{
if(arr1[j] > arr1[j-1])
{
tmp = arr1[j];
arr1[j] = arr1[j-1];
arr1[j-1] = tmp;
}
if(arr2[j] > arr2[j-1])
{
tmp = arr2[j];
arr2[j] = arr2[j-1];
arr2[j-1] = tmp;
}
}
}
#endif


srand(time(0));
for(i=0;i<LEN;i++)
{
tmp = rand()%1000;
//printf("\nrand():%d",tmp);
arr1[i] = tmp;
tmp = rand()%1000;
arr2[i] = tmp;
}
printf("\n________________________ ori status _________________________\n");
print_arr(arr1, LEN);
print_arr(arr2, LEN);
sum1=0;
sum2=0;
for(i=0;i<LEN;i++)
{
sum1 += arr1[i];
sum2 += arr2[i];
}
diffTotal = abs(sum1-sum2);
printf("\nsum1:%d  sum2:%d  diffTotal:%d \n", sum1, sum2,diffTotal);


bool s1big = false;
int zi =0,zj=0;
int nearestDiff = -1;
if(sum1>sum2)
s1big = true;
zi=0;
zj=0;
while(diffTotal>(sum1+sum2)%2) 
{

nearestDiff = getnearest(s1big, diffTotal,&zi, &zj);
if(nearestDiff <= 0 || nearestDiff>diffTotal/2)
break;
else
{
tmp = arr1[zi];
arr1[zi]=arr2[zj];
arr2[zj]=tmp;
diffTotal = diffTotal - 2* nearestDiff;
printf("\n###### swap ######  nearestDiff:%d, arr1:%d arr2:%d  diffT:%d\n", nearestDiff, zi, zj, diffTotal);
}


}


printf("\n________________________ check _________________________\n");
print_arr(arr1, LEN);
print_arr(arr2, LEN);
sum1=0;
sum2=0;
for(i=0;i<LEN;i++)
{
sum1 += arr1[i];
sum2 += arr2[i];
}
diffTotal = abs(sum1-sum2);
printf("\nsum1:%d  sum2:%d  diffTotal:%d \n", sum1, sum2,diffTotal);





return 0;
}

### 华为笔试题 IT 类型 题库 开发 运维 算法 数据结构 华为作为全球领先的科技公司之一,在其招聘过程中非常注重考察候选人的技术能力,尤其是开发、运维以及算法和数据结构方面的知识。以下是关于这些主题的一些常见考点及相关内容。 #### 常见的算法和数据结构 对于开发者来说,“算法和数据结构”是面试中的核心部分。以下是一些常见的算法和数据结构及其应用: - **数组与字符串操作** 数组和字符串是最基础的数据结构,常用于解决实际问题。例如,反转字符串或查找子串等问题经常出现在考试中[^1]。 - **链表** 链表的操作包括增删节点、翻转链表等。这类题目通常用来测试候选人对指针的理解程度。 - **栈与队列** 栈和队列的应用场景广泛,比如括号匹配问题可以通过栈来实现;广度优先搜索(BFS)则依赖于队列[^2]。 - **树与图** 树形结构如二叉树遍历(前序、中序、后序)、最小生成树等都是高频考点。而图论涉及最短路径(Dijkstra算法)、拓扑排序等内容也非常重要。 - **动态规划** 动态规划是一种优化方法,适用于求解多阶段决策过程的最佳策略问题。它通过记录中间状态减少重复计算量从而提高效率[^3]。 #### 华为OD机试试题实例分析 以具体案例说明如何运用上述理论解决问题。例如,在任务最优调度这一类问题上,可以采用深度优先搜索(DFS)或者回溯法找到所有可能组合并从中挑选最佳方案。 另外还有其他类型的编程挑战,像给定一组数找出其中的最大连续子序列之和等等。这些问题不仅考验基本功扎实与否同时也考量思维灵活性。 #### 运维方向的知识要点 除了纯编码技能外,针对运维岗位还会有专门面向系统管理和网络配置等方面的技术问答。例如了解哪些工具能够对接主流虚拟化平台进行统一纳管就是其中一个例子[A.eSight](https://support.huawei.com/enterprise/docinforeader.do?lang=en&docid=EDOC1100089475)[^4]。 ```python def max_subarray_sum(nums): """ 计算最大连续子数组的总和 参数: nums (List[int]): 输入整数列表 返回值: int: 最大子数组的和 """ current_max = global_max = nums[0] for num in nums[1:]: current_max = max(num, current_max + num) if current_max > global_max: global_max = current_max return global_max ``` 以上代码片段展示了利用Kadane's Algorithm快速定位到目标区间内的最高数值累积效果的方法。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值