目录
        一面:
        非代码题目:
       代码题目:
       1.数组中有一个出现次数超过数组一半的数字,请找出来这个数字
        题目2:双链表的删除操作
        二面:
        题目1:如何求出来一个数组的连续最大和
首页 数据库 mysql教程 百度实习生面试(2013年12月2号)

百度实习生面试(2013年12月2号)

Jun 07, 2016 pm 03:19 PM
12月 实习生 百度 面试

前一段时间面过百度商务搜索部门的软件开发实习生,面了3面,没有通过,还差的很远。百度对算法的要求还是比较高的,虽然时间过去了一段时间了,但是有些题目还是可以记起来。特此发篇博客,记录下内容,也以此激励自己,希望下次在去会有进步。 整个面试过

        

        前一段时间面过百度商务搜索部门的软件开发实习生,面了3面,没有通过,还差的很远。百度对算法的要求还是比较高的,虽然时间过去了一段时间了,但是有些题目还是可以记起来。特此发篇博客,记录下内容,也以此激励自己,希望下次在去会有进步。


        整个面试过程大概写了7 8 道程序题目把,脑袋都写大了。通过这次面试知道了有两个需要注意和锻炼的地方:


        1.在纸上写代码的能力。最好带支铅笔和橡皮过去,如果你字写的不好看,写的时候在涂涂画画修改下,会显得代码乱七八糟的,自己看着都觉得恶心。更别提面试官了。如果没有绝对的实力一遍写过,最好用铅笔和橡皮,错了还可以擦掉。


        2.在写代码的时候一定要特别注意某些边界条件的判断,尤其要小心。虽说不是什么大错误,但是被面试官发现的话是相当不好的。囧,自己发现了2处。譬如说我在写的时候犯的错误,双链表的最后一个节点的判断条件不是等于空,而是指向第一个头节点。


        好了,没有面过就继续努力,吸取下经验教训。继续往前走。下面记录下遇到的程序题目。


        一面:

        

        非代码题目:


        除了写代码之外问的都比较基础,譬如 虚函数  static关键字的作用, const 关键字的作用。(这里需要注意const的位置不同,代表的含义不同)。


       代码题目:

       

       1.数组中有一个出现次数超过数组一半的数字,请找出来这个数字


        这个题目算是比较常见的了, 在剑指offer上也出现过了,也给出了2种解法。

  

        解法1:基于partition函数的解法


        数组中的一个数字出现的次数超过数组的一半,那么排序后这个数组的中间的数字一定是这个出现了一半次数的数字。也就是数组的中位数。我们可以把问题简化到求数组  第 n/2大的数字。


        算法是受到快速排序算法的启发,在数组中随机选中一个数字,然后调整数组的顺序,使得比选中数组小的数字都在数字的左边,比选中的数字大的数字都在数字的右边。这个就是partition算法。如果这个选中的数字下标刚好是n/2,那么可以返回了,如果大于n/2,则中位数在他的左边,我们可以在左边的数组中查找。


        

#include <iostream>

using namespace std;
void Swap( int & x, int & y ){
    int temp = x;
    x = y;
    y = temp;
}
int partition ( int a[ ], int begin ,int  end ){
    int temp = a[ begin ];
    int i,j;
    i = begin;
    j = end;
    while( i = temp && i > 1;
    int start = 0;
    int end = length - 1;
    int partitionIndex = partition( numbers, start, end );
    while( partitionIndex != middle ){
        if( partitionIndex > middle ){
            end = partitionIndex - 1;
            partitionIndex = partition( numbers, start, end );
        }
        else{
            start = partitionIndex + 1;
            partitionIndex = partition( numbers, start, end );
        }
    }
    int result =  numbers[ middle ];
    if( !CheckMoreThanHalf( numbers, length, result ) )
        result = 0;
    return result;
}
int main()
{
    int num[ ] = {1,2,3,2,2,2,5,4,2};
    int result = MoreThanHalfNum( num, 9 );
    if( isInputInValid == true  ){
        if( result == 0)
            cout            <span> 在面试的时候,一定要处理参数的输入是否正确。譬如说本题目,需要考虑2点</span>
<p><span>        1.传入的数组退化成指针的时候是否为空,或者length 是否小于等于0</span></p>
<p><span>        2.找到了中间的值,但是有可能这个值没有在数组中出现一半以上。这也是需要考虑的的一点。</span></p>
<p><span><br>
</span></p>
<p><span><br>
</span></p>
<p><span>         方法2:另外一种方法,方法1主要消耗在排序上面,如果我们能跳过排序这个步骤,只扫描一遍数组就能找到的话就太好了。我在面试的时候做出来第一种方法后 被特别要求用另外一种方法来做。</span></p>
<p><span><br>
</span></p>
<p><span>         对于数组,我们假设每次删除2个不同元素的值,则剩余的数组中,原先出现频率大于一半的还是会大于一半。一直重复删除,直到剩下的全是同样的数字。则必定是出现了一半次数的那个值。时间复杂度为o(n)</span></p>
<p><span><br>
</span></p>
<p><span>        代码:</span></p>
<p></p>
<pre class="brush:php;toolbar:false">#include <iostream>

using namespace std;

bool isInputInValid = false;
bool CheckInvalidArray( int numbers[ ], int length ){
    isInputInValid = false;//初始认为输入正确
    if( NULL == numbers || length <br>
<h3 id="span-题目-双链表的删除操作-span"><span>        题目2:双链表的删除操作</span></h3>

<p><span><br>
</span></p>
<p><span>        这个没什么要写的,唯一要注意的是判断是否链表最后一个节点的判断条件是next指针指向头节点,而不是判断为空。</span></p>
<p><span><br>
</span></p>
<p><span><br>
</span></p>
<h1 id="span-二面-span"><span>        二面:</span></h1>
<p><span><br>
</span></p>
<p><span>        二面的面试官很和蔼,而且年纪看起来很小。应该也是刚毕业那种。随便自我介绍了下,就开始做题了。</span></p>
<p><span><br>
</span></p>
<h3 id="span-题目-如何求出来一个数组的连续最大和-span"><span>        题目1:如何求出来一个数组的连续最大和</span></h3>
<p><span><br>
</span></p>
<p><span>        这个题目也算是常见题目了,在各大公司面试中出现频率特别频繁。</span></p>
<p><span><br>
</span></p>
<p><span>        思路:</span></p>
<p><span>        </span></p>
<p><span>        1.当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。 设置置两个变量 ,初始值都为0,一个记录最大连续和result,一个记录连续和sum,对于数组中的每个值,我们有两种选择,对于正的数值,sum相加,如果大于result,则更新result。对于负数值A[i],我们要考虑两种情况:1) 如果sum+A[i]
 </span></p>
<p></p>
<pre class="brush:php;toolbar:false">int LongConsequiveNum( int A[], int length ){
    int sum = 0, result = 0;
    for( int i = 0; i  0 ){
            sum += A[ i ];
            if( sum > result )
                result = sum;
        }
        else{
            if( A[ i ] + sum <br>
<br>

<p><span>         july博客上有仔细的讲解,传送门:http://blog.csdn.net/v_JULY_v/article/details/6444021</span></p>
<p><span><br>
</span></p>
<p></p><pre class="brush:php;toolbar:false">int MaxSubsequenceSum(const int A[],int N)  
{  
    int ThisSum,MaxSum,j;  
    ThisSum=MaxSum=0;  
    for(j=0;j<n thissum if>MaxSum)  
            MaxSum=ThisSum;  
        else if(ThisSum<br>
<br>

<p><span>        另外这个求数组连续最大和也可以用动态规划来做:</span></p>
<p><span>        </span></p>
<p><span>        将子问题设MaxLen[i]表示以A[i]结尾 的子数组的最大子段和,即:</span><span><span>MaxLen</span>[i]=max{MaxLen(i - 1) ,0} + A[i],状态转移方程写出来了,其余代码就简单了。</span><span><br>
<br>
</span></p>
<pre class="brush:php;toolbar:false">//
//  MaxSum.cpp
//  MaxSum
//
//  Created by chenhao on 12/17/13.
//  Copyright (c) 2013 mini. All rights reserved.
//

#include <iostream>
using namespace std;
#define INTMIN -1000
const int MAX_SIZE =  100;

int data[ MAX_SIZE + 10 ];
int MaxLen[ MAX_SIZE + 10 ];
int N;
int main(int argc, const char * argv[])
{
    while( cin >> N ){
        for( int i = 1; i > data[ i ];
        MaxLen[ 1 ] = data[1];
        for( int i = 2; i  data[ i ] )
                MaxLen[ i ] = MaxLen[ i - 1 ] + data[ i ];
            else
                MaxLen[ i ] = data[ i ];
        }
        int result = INTMIN;
        for( int i = 1; i <br>
<br>

<p><span><br>
</span></p>
<p><span>        题目2:求出来题目1后,立马让求二维数组,二维的没写出来。悲剧。</span></p>
<p><span><br>
</span></p>
<p><span><br>
</span></p>
<p><span><br>
</span></p>
<p><span><br>
</span></p>
<p><span><br>
</span></p>
<p><span>        </span></p>
<p><span>        </span></p>


</iostream>
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
2 个月不见,人形机器人 Walker S 会叠衣服了 2 个月不见,人形机器人 Walker S 会叠衣服了 Apr 03, 2024 am 08:01 AM

机器之能报道编辑:吴昕国内版的人形机器人+大模型组队,首次完成叠衣服这类复杂柔性材料的操作任务。随着融合了OpenAI多模态大模型的Figure01揭开神秘面纱,国内同行的相关进展一直备受关注。就在昨天,国内"人形机器人第一股"优必选发布了人形机器人WalkerS深入融合百度文心大模型后的首个Demo,展示了一些有趣的新功能。现在,得到百度文心大模型能力加持的WalkerS是这个样子的。和Figure01一样,WalkerS没有走动,而是站在桌子后面完成一系列任务。它可以听从人类的命令,折叠衣物

百度Apollo重磅发布全球首个支持L4级自动驾驶的大模型Apollo ADFM 百度Apollo重磅发布全球首个支持L4级自动驾驶的大模型Apollo ADFM Jun 04, 2024 pm 08:01 PM

5月15日,百度Apollo在武汉百度萝卜快跑汽车机器人智行谷举办ApolloDay2024,全方位展示百度十年深耕自动驾驶的重大进展,基于大模型带来技术阶跃、面向乘客安全全新定义的无人车和全球最大的无人车自动运营网络,百度已经做到自动驾驶比人类驾驶更安全。得益于此,更加安全舒适、绿色低碳的出行方式正从理想成为现实。百度集团副总裁、智能驾驶事业群组总裁王云鹏现场表示:“我们做无人车的初衷,是满足老百姓日益增长的、对美好出行的向往,人民群众的满意是我们前进的动力。因为安全、所以美好,我们欣喜地看到

百度李彦宏率队拜访中国石油,讨论油气行业智能化 百度李彦宏率队拜访中国石油,讨论油气行业智能化 May 07, 2024 pm 06:13 PM

本站5月7日消息,5月6日,百度创始人、董事长兼首席执行官李彦宏带队在北京拜访中国石油天然气集团有限公司(以下简称“中国石油”),并与中国石油集团董事长、党组书记戴厚良举行会谈。双方就强化合作,推动能源行业与数字化智能化深度融合进行了深入交流。中国石油将加快推进数字中中国石油建设,加强与百度集团合作,推动能源行业与数字化智能化的深度融合,为保障国家能源安全作出更大贡献。李彦宏表示,大模型展现出的“智能涌现”和理解、生成、逻辑、记忆等核心能力,为前沿科技与油气业务结合打开了更加广阔的想象空间。一直

golang框架面试题集锦 golang框架面试题集锦 Jun 02, 2024 pm 09:37 PM

Go框架是一组扩展Go内置库的组件,提供预制功能(例如Web开发和数据库操作)。流行的Go框架包括Gin(Web开发)、GORM(数据库操作)和RESTful(API管理)。中间件是HTTP请求处理链中的拦截器模式,用于在不修改处理程序的情况下添加身份验证或请求日志记录等功能。Session管理通过存储用户数据来保持会话状态,可以使用gorilla/sessions管理session。

deepseek网页版入口 deepseek官网入口 deepseek网页版入口 deepseek官网入口 Feb 19, 2025 pm 04:54 PM

DeepSeek 是一款强大的智能搜索与分析工具,提供网页版和官网两种访问方式。网页版便捷高效,免安装即可使用;官网则提供全面产品信息、下载资源和支持服务。无论个人还是企业用户,都可以通过 DeepSeek 轻松获取和分析海量数据,提升工作效率、辅助决策和促进创新。

百度息壤贝壳获取方法介绍 百度息壤贝壳获取方法介绍 Mar 28, 2024 am 09:11 AM

在息壤中有不少用户不知道贝壳在哪里,怎么才能获得,有些玩家转了几个小时候都没有找到,下面小编就带来了百度息壤贝壳的获取方法,快来一起看看吧。百度息壤贝壳怎么获得1、首先我们需要来到社区,然后来到下图的这个位置。2、在这里选择目的地,选择进入188层。3、进入到188层后,在周围转悠会有这个提示,点击我知道了就行。4、贝壳的位置可能会有些难找,就在188电梯的后面,有个发光的小点就是贝壳。5、捡贝壳需要用VR手柄才能捡,点击贝壳就可以了。兑换方式1、首先点击页面右上方的“设置”图标,在设置中选择“

消息称三星 Galaxy S24 系列手机国行版'即圈即搜”将支持谷歌搜索 消息称三星 Galaxy S24 系列手机国行版'即圈即搜”将支持谷歌搜索 Jun 01, 2024 am 09:54 AM

5月31日消息,据博主@i冰宇宙今日爆料,三星GalaxyS24系列手机国行版“即圈即搜”将支持谷歌搜索。具体上线时间,该博主并未透露。根据三星此前介绍,三星GalaxyS24系列实装了众多高阶AI能力,将输入、翻译、录音机、笔记、相机等实用功能AI化,为用户带来更方便、更高效的综合体验。与海外版不同的是,三星GalaxyS24系列的AI功能大多由国内厂商提供服务,例如百度等。此前报道,GalaxyAI深度集成百度文心大模型多项能力,可提供端侧赋能的通话、翻译功能,以及借助生成式AI带来的智能摘

ai工具推荐 ai工具推荐 Nov 29, 2024 am 11:08 AM

本文介绍了六款流行的 AI 工具,包括抖音豆包、文心一格、腾讯智影、百度飞桨 EasyDL、百度 AI Studio 和讯飞星火认知大模型。这些工具涵盖不同的功能,如文本创作、图像生成、视频编辑和 AI 模型开发。选择合适的 AI 工具需要考虑功能需求、技术水平和成本预算等因素。这些工具为需要 AI 辅助的个人和企业提供了方便且高效的解决方案。

See all articles