当前位置: 首页 > news >正文

人人网2014笔试算法题汇总


1.给出一个有序数组啊,长度为len,另外给出第三个数X,问是否能在数组中找到两个数,这两个数之和等于第三个数X。

我们首先看到第一句话,这个数组是有序的,所以,我们可以定义两个指针,一个指向数组的第一个元素,另一个指向应该指向的位置(这个需要看具体的实现和数组给定的值),首先计算两个位置的和是否等于给定的第三个数,如果等于则算法结束,如果大于,则尾指针向头指针方向移动,如果小于,则头指针向尾指针方向移动,当头指针大于等于尾指针时算法结束,没有找到这样的两个数。

解法一:

#include <stdio.h>  
  
int judge(int *a, int len, int k, int *num1, int *num2);  
  
int main(int argc, char **argv)  
{  
    int test_array[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};  
    int result = -1;  
    int num1, num2;  
    result = judge(test_array, sizeof(test_array) / sizeof(int), 12, &num1, &num2);  
    if(result == 0)  
    {  
        printf("%d\t%d\n", num1, num2);  
    }  
    else if(result == -1)  
    {  
        printf("can't find");  
    }  
    else  
    {  
        printf("error");  
    }  
}  
  
int judge(int *a, int len, int k, int *num1, int *num2)  
{  
    int *low = NULL;  
    int *high = NULL;  
    int i = 0;  
    int result = -1;  
    if(a == NULL || len < 2)  
    {  
        return result;  
    }  
    if(a[0] >= k)  
    {  
        return result;  
    }  
    while(a[i] <= k && i < len)  
    {  
        i++;  
    }  
    low = a;  
    high = a + i - 1;  
    while(low  < high)  
    {  
        *num1 = *low;  
        *num2 = *high;  
        if((*low + *high) == k)  
        {  
            result = 0;  
            break;  
        }  
        else if((*low + *high) > k)  
        {  
            high--;  
        }  
        else if((*low + *high) < k)  
        {  
            low++;  
        }  
    }  
    return result;  
}  

解法二:

#include <iostream>  
  
using namespace std;  
  
int hash_table[100];  
  
bool judge(int *a, int len, int x)  
{  
    memset(hash_table, 0, sizeof(hash_table));  
    for (int i=0; i<len; ++i)  
    {  
        hash_table[x - a[i]] = 1;  
    }  
  
    for (int i=0; i<len; ++i)  
    {  
        if (hash_table[i] == 1)  
        {  
            return true;  
        }  
    }  
  
    return false;  
}  
  
int main()  
{  
    int len = 10;  
    int a[10] = {1, 3, 5, 7, 9, 4, 2, 8, 10, 6};  
    int x = 19;  
  
    if (judge(a, len, x))  
    {  
        cout<<"Yes"<<endl;  
    }  
    else  
    {  
        cout<<"No"<<endl;  
    }  
    system("pause");  
    return 0;  
}  

本题解决方法:hash table。

时间复杂度:O(N)

空间复杂度:O(N)


2.给定有n个数的数组a,其中有超过一半的数为一个定值,在不进行排序,不开设额外数组的情况下,以最高效的算法找出这个数。

int find(int* a, int n);

#include <iostream>  
  
using namespace std;  
  
int find(int *a, int n)  
{  
    int t = a[0];  
    int count = 0;  
    for (int i=0; i<n; ++i)  
    {  
        if (count == 0)  
        {  
            t = a[i];  
            count = 1;  
            continue;  
        }  
        else  
        {  
            if (a[i] == t)  
            {  
                count++;  
            }  
            else  
            {  
                count--;  
            }  
        }  
    }  
  
    return t;  
}  
  
int main()  
{  
    int n = 10;  
    int a[10] = {1, 3, 2, 3, 3, 4, 3, 3, 3, 6};  
  
    cout<<find(a, n)<<endl;  
  
    system("pause");  
    return 0;  
}  

Time Complexity: O(n)

Space Complexity:O(1)


转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12209217



相关文章:

  • 暴风影音2014笔试算法题汇总
  • 华为2014笔试算法题汇总
  • 百度2014笔试算法题汇总
  • 美团网2014笔试算法题汇总
  • 2014百度校招笔试题
  • 从程序员到项目经理:认识项目经理
  • Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)...
  • 每天一道算法_2_求高精度幂
  • 【总结】android程序不显示图标,开机自动启动?我来告诉你
  • 完美洗牌算法学习
  • 关于完美洗牌算法中圈和圈起点的一个证明
  • 关于完美洗牌问题的若干思考
  • 木块砌墙
  • Google的一个面试题——数组原地置换
  • linux hostname命令学习
  • 分享一款快速APP功能测试工具
  • 【Amaple教程】5. 插件
  • 【comparator, comparable】小总结
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • JavaScript设计模式系列一:工厂模式
  • miaov-React 最佳入门
  • passportjs 源码分析
  • PHP那些事儿
  • Spring Boot MyBatis配置多种数据库
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 京东美团研发面经
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 扑朔迷离的属性和特性【彻底弄清】
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​Linux·i2c驱动架构​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • "无招胜有招"nbsp;史上最全的互…
  • #Linux(Source Insight安装及工程建立)
  • $ git push -u origin master 推送到远程库出错
  • $GOPATH/go.mod exists but should not goland
  • ( 10 )MySQL中的外键
  • (1) caustics\
  • (3)llvm ir转换过程
  • (day6) 319. 灯泡开关
  • (MATLAB)第五章-矩阵运算
  • (poj1.3.2)1791(构造法模拟)
  • (vue)页面文件上传获取:action地址
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (三)模仿学习-Action数据的模仿
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)树状数组
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting