记一次笔试面试题之算法

快到年底了,考虑到一些情况,加之现在工作业务没那么多了,本着想在技术上想在多学点东西的想法,突然间萌生了想换工作的想法,恰好一不错的公司Hr给我说他们在招人,于是我就偷偷的给了份简历,时隔几天她给了我一份笔试题,我一看有算法题,这是我最头疼的问题,我不反对面试算法,但是我感觉很多用人单位还是要本着自己的业务水平去面试,招适合本公司业务处理,相对比较实用又符合发展的人才就行了,当你真正拿出一些很高深的算法去面试的时候,我感觉你要看看你开出来招人的预算是不是能达到答出来这些题的待遇,是不是你现在的业务就需要这么高深的技术支撑,同时是不是能给一些比方说像我这种级别低点的大众话程序员次机会!下面我列出面试题也求园里的高手求解下,本人求知若渴,只想做在技术上的交流,因为我确实在算法上很不在行,本着虚心求教的态度,我想在这方面多学习下。

要求30分钟
      编程语言不限,允许有小的语法错误;
      在程序前面简单写出编程思路;
      1、编写一个函数,不用临时变量,直接交换两个数。
      2、用数组实现一个容量为n的队列,要求进队列和出队列的时间复杂度都为O(1)。
      3、写一个函数,在给定的n个数字中,找出最小的m个,其中m<n。请一并给出算法的时间复杂度。

一下是我发给他们的答案

class Program
    {
        static void Main(string[] args)
        {
            //第一题
            int numA = 321;
            int numB = 8765;
            numA = numA ^ numB;
            numB = numB ^ numA;
            numA = numA ^ numB;
            Console.WriteLine(numA);
            Console.WriteLine(numB);

            //第二题
            var n = 100;
            var arr = new string[n];
            var index = 0;
            var last = 0;
            //入队列
            Action<string> push = s =>
            {
                var nIndex = index + 1;
                nIndex = nIndex == n ? 0 : nIndex;
                if (nIndex == last)
                {
                    Console.WriteLine("队列已满");
                    return;
                }

                arr[index] = s;
                index = nIndex;
            };

            ///出队列
            Func<string> pop = () =>
            {
                string result;
                if (index == last)//队列中无数据
                {
                    result = null;
                }
                result = arr[last];
                last++;
                last = last == n ? 0 : last;
                return result;
            };
            push("AAA");
            push("BBB");
            push("CCC");
            push("DDD");
            Console.WriteLine(pop());
            Console.WriteLine(pop());
            Console.WriteLine(pop());
            Console.WriteLine(pop());

            //第三题  算法复杂度O(n) 因为时间关系目前只支持正整数
             int[] arrInt = new[] { 1, 2, 4, 6, 8, 9, 4, 2, 4, 7, 9 };
             int n1 = arrInt.Length;

            Func<int, int[]> func = m =>
            {
                var max = 0;
                foreach (var item in arrInt)
                {
                    max = max < item ? item : max;
                }
                var nArr = new bool[max + 1];
                foreach (var item in arrInt)
                {
                    nArr[item] = true;
                }
                var result = new int[m];
                var indexInt = 0;
                for (var i = 0; i < nArr.Length; i++)
                {
                    if (nArr[i])
                    {
                        result[indexInt] = i;
                        indexInt++;
                    }
                    if (indexInt == m)
                    {
                        break;
                    }
                }
                return result;
            };
            var tmp = func(3);
            foreach (var item in tmp)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();

        }
    }

以上是我给过去的答案,最后的结果是没通过,但是我也不能在厚着脸皮去问为什么了,毕竟那边是人事不是技术,我感觉我第三题的算法可能有问题,虽然实现了功能要求,但是我确实不知道哪里有问题,希望园子里的高手能给我指点下,第三题应该怎么写?虽然没通过,但是我也想在一次面试中找到自己的不足,这道题以我目前的水平不足以有更好的写法了,所以想求解更好的答案

时间: 2024-12-15 06:17:49

记一次笔试面试题之算法的相关文章

数据结构与算法笔试面试题整理

给出的一些常见的数据结构与算法的笔试面试题,特整理如下,后期遇到新的再更新. 笔试面试题 常见时空复杂度有 常数级复杂度:O(1) 对数级复杂度:O(logN) 线性级复杂度:O(N) 线性对数级复杂度:O(NlogN) 平方级复杂度:O(N2) 冒泡排序算法(重点) (1)算法流程 a.比较两个相邻的元素,如果第一个比第二个大,则交换两个元素的位置: b.对每一对相邻的元素做同样的工作,从开始的第一对一致到结尾的最后一对,经过这一步,最后的元素将是最大值: c.针对所有的元素重复以上步骤,除了

西安尚学堂练习09.17|Java编程笔试面试题

下列哪些类型能被throw语句抛出? A. Error B. Exception C. Throwable D. Object [解]注意Error也是可以被throw的,只是通常Error出现程序就中断了,我们并不会去捕获. 2.编程:给定两个字符串A,B(只包含26个英文字母),输出所有公共的最长子字符串(如果出现重复子串,则输出多次) 输入包括两行,每行为一个连续字符串(大小写敏感) 输出包括多行,每行为扫描到的最长公共子串,按照该子串在字符串A(即第一行输入字符串)中出现的先后次序输出

秒杀多线程第一篇 多线程笔试面试题汇总 ZZ 【多线程】

http://blog.csdn.net/morewindows/article/details/7392749 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性.系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”.有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题. ----------------------

数据库笔试面试题库(Oracle、MySQL等)

数据库笔试面试题库(Oracle.MySQL等) ⊙ [DB笔试面试67]在Oracle中,关于表分区下列描述不正确的是()⊙ [DB笔试面试65]在Oracle中,哪一种表分区方式建议的分区数是2的幂(2.4.8等),以获得最平均的数据发布()⊙ [DB笔试面试63]要以NAME's address is ADDR格式返回数据,以下SQL语句正确的是⊙ [DB笔试面试61]以下关于数据模型要求错误的是()⊙ [DB笔试面试59]以下关于视图叙述不正确的是()⊙ [DB笔试面试57]下列关于SQ

可能碰到的iOS笔试面试题(4)--C语言

可能碰到的iOS笔试面试题(4)--C语言 可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的一些问题可能并不是C语言问题,但是属于计算机的一些原理性的知识点,所以我就不再另外写一篇文章了,直接写在这里. 当你写下面的代码时会发生什么事? least = MIN(*p++, b); 结果是:((p++) <= (b) ? (p++) : (*p++)) 这个表达式会产生副作用,指针p会作三次

BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇

BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇 2014/08/03 · Web前端, 开发 · CSS, HTML, 技术面试 分享到: 188 MongoDB集群之分片技术应用 Hello,移动WEB Linux权限管理之特殊权限 Android高级特效-索引 原文出处: Ico_Coco 的博客(@CHoK__Coco_mAm)   欢迎分享原创到伯乐头条 很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习

Java笔试面试题002

  Java笔试面试题002 1.struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的? 解答: 1)可以直接通过与表单元素相同名称的数据成员(需要存在符合命名规范set和get方法)获取页面表单数据. 2)会把处理好的数据成员放入值栈中,到页面可以使用struts2标签取值就可以了. 2.常用的设计模式有哪些?说明工厂模式. 解答:Java中的23种设计模式: Factory(工厂模式), Builder(建造模式),Factory Me

AJAX笔试面试题汇总

AJAX笔试面试题汇总 Javascript 1. 什么是ajax,为什么要使用Ajax(请谈一下你对Ajax的认识) 什么是ajax: AJAX是“Asynchronous JavaScript and XML”的缩写.他是指一种创建交互式网页应用的网页开发技术. Ajax包含下列技术: 基于web标准(standards-based presentation)XHTML+CSS的表示: 使用 DOM(Document Object Model)进行动态显示及交互: 使用 XML 和 XSLT

【转】BAT及各大互联网公司2014前端笔试面试题:JavaScript篇

原文转自:http://blog.jobbole.com/78738/ 很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确,如有错误或有更好的解法,还请斧正. 前面几题是会很基础,越下越有深度. 附上第二篇:BAT及各大互联网公司2014前端笔试面试题–Html,Css篇 前面几题是会很基础,越下越有深度. 初级Javascript: 1.Jav