程序员面试修炼10 | 携程2017秋招笔试题

Posted 19应届生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员面试修炼10 | 携程2017秋招笔试题相关的知识,希望对你有一定的参考价值。



如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。

——DavidLeinweber

名词解释

数据库模式定义语言(DDL)

数据库模式定义语言DDL(Data Definition Language)是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。数据库模式定义语言并非程序设计语言,DDL数据库模式定义语言是SQL语言(结构化程序设计语言)的组成部分。SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)和事务控制语言(TCL)。

统一资源定位符(URL


程序员面试修炼10 | 携程2017秋招笔试题

笔试/面试真题真题

题目描述(携程- 2017秋招笔试题) 

输入字符串(未给长度限制),要求删除重复出现的字符(保留第一个)例如

输入: Hello World

输出:Helo Wrd

内存限制:65536KB

解题思路:

题目的关键有两点:找到重复元素,删除重复元素


找重复元素:可以通过两个for循环查找,第一个for循环是外循环,负责选择数组里的元素作为参照,第二个for循环是内循环,负责将剩下的元素与一个for循环选择的元素参照进行比较,然后将重复的元素的值设置为0,跟冒泡排序类似,而这里是讲冒泡里的两两交换变为了设置为0,因此该算法的时间复杂度也是为O(N^2)

删除重复元素:可以在查找重复元素后的基础上,将元素值不为零的元素前移即可。


代码示例:

下面来看解题代码:

#include <stdio.h>
#include <string.h>

void DeleteRepChar(char
*s) {
   
int length = strlen(s);
   
int i,j;
    
for (i = 0; i < length; i++)    {
       
for (j = i + 1; j < length; j++)        {
           
if (s[i] == 0)
               
continue;
           
if (s[i] == s[j])
               
s[j] = 0;        }    }    i = 0;
   
int n;
    
for (i = 0, n = 0; i < length; i++)    {
       
if (s[i] != 0)
           
s[n++] = s[i];    } }int main() {    char arr[10000];    fgets(arr, 10000, stdin);       //scanf("%s", arr);    DeleteRepChar(arr);
   
printf("%s", arr);
   
return 0; }

程序员面试修炼10 | 携程2017秋招笔试题

技术知识点:Linux基本命令

grep命令常见用法:

grep命令可以说是Linux下面最常用的文本处理工具了,那么究竟我们可以用grep命令做什么了?首先我们想一想在windows下是我们是如何在整个文本中寻找我们所需的内容的,比如说我想在grep.txt文档中寻找字符串"hello",肯定不是一行一行用眼睛去扫描,我们只需要打开该文件,使用快捷键Ctrl+F然后在弹出的小框中输入我们要查的”hello”,就能迅速的定位到”hello”字符串了。好了,现在我们可以说说grep了,其实很简单,它的功能和前面所讲windows下的组合键Ctrl+F类似,都是方便我们用来搜索文本的。

既然grep这么有用,那么我们现在一起来学习它,首先准备一个测试文件用来说明grep的用法,如下图所示,各位看官就不要纠结文件内容,内容没有任何意义,纯属只是用来验证grep用法的。

程序员面试修炼10 | 携程2017秋招笔试题

Linux下基本上每个命令都有很多参数,grep也不例外,不要求每个参数都了如指掌,我们只需掌握几个常见的参数就足够应付日常工作所需了,现在一起来看看grep究竟有哪些参数以及这些参数的用途。


01 不参数

grep最简单的用法就是不加任何参数,比如说,我们想要在grep.txt文件中找到含有字符串"hello"的所有行,那么我们可以

程序员面试修炼10 | 携程2017秋招笔试题

02 -n

-n参数可以让你在显示所匹配到的内容时同时显示行号,还是在grep.txt文件中找到含有字符串"hello"的所有行 ,这次我们加了-nc参数,看看和上面的输出有什么不同

程序员面试修炼10 | 携程2017秋招笔试题

03 -i

可以使用-i选项在匹配时忽略大小写,比如说

程序员面试修炼10 | 携程2017秋招笔试题

04 --color

看看上面的输出,还是觉得有点不太爽,输出都是白色字体,我们要找的hello到底在一行的什么位置还是需要我们用眼睛费力的去看,其实,grep提供了一个参数完全可以解放我们这种不必要的劳力,就是--color 参数,不过需要注意的一点是,这是个长选项参数,Linux命令的参数分为长选项参数 和短选项参数,长选项参数前是2个-。好了,还是用上面的文件做个测试看看。

程序员面试修炼10 | 携程2017秋招笔试题

05 -o

在前面的实例中,包含匹配词的行整行都会被打印出来,但是有时候我们并不需要整行打印,只是想看到被匹配的关键词,这时候就需要用到-o 选项了,如下所示。

程序员面试修炼10 | 携程2017秋招笔试题

06 -A / -B / -C

某些情况下,我们不仅需要显示关键词匹配的行,还需要显示所匹配行的前后行信息,这时候就需要用到-A/-B/-C这三个参数了,

其中: -A n(n是一个整数)--->表示将匹配行的后n行也显示

-B n(n是一个整数)--->表示将匹配行的前n行页显示

-C n(n是一个整数)--->表示将匹配行的后n行也显示

看的有点晕?没关系,看看下面的例子就明白了。为了方便阅读,将测试所需的文件内容在此处再贴出来。

程序员面试修炼10 | 携程2017秋招笔试题

程序员面试修炼10 | 携程2017秋招笔试题

07 -v

有时候我们需要反向查找,也就是说,查找的行是不含所给出的匹配词的,-v参数就是实现这个功能的,还是看例子:找出grep.txt文件中不含"hello"的行

程序员面试修炼10 | 携程2017秋招笔试题


程序员面试修炼10 | 携程2017秋招笔试题


幸运总是会眷顾有准备的人,小伙伴们,跟着【19应届生】学习技术知识,我们一起加油吧~!
程序员面试修炼10 | 携程2017秋招笔试题


以上是关于程序员面试修炼10 | 携程2017秋招笔试题的主要内容,如果未能解决你的问题,请参考以下文章

美团2017秋招笔试题 拼凑钱币

网易2017秋招笔试题3:最长公共子括号序列长度

2017腾讯秋招笔试题之编码

2017腾讯秋招笔试题之编码

TX2017秋招笔试题之编码

TX2017秋招笔试题之geohash编码