程序员面试修炼10 | 携程2017秋招笔试题
Posted 19应届生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员面试修炼10 | 携程2017秋招笔试题相关的知识,希望对你有一定的参考价值。
如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。
——DavidLeinweber
名词解释
数据库模式定义语言(DDL)
数据库模式定义语言DDL(Data Definition Language)是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。数据库模式定义语言并非程序设计语言,DDL数据库模式定义语言是SQL语言(结构化程序设计语言)的组成部分。SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)和事务控制语言(TCL)。
统一资源定位符(URL)
笔试/面试真题真题
题目描述(携程- 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; }
技术知识点:Linux基本命令
grep命令常见用法:
grep命令可以说是Linux下面最常用的文本处理工具了,那么究竟我们可以用grep命令做什么了?首先我们想一想在windows下是我们是如何在整个文本中寻找我们所需的内容的,比如说我想在grep.txt文档中寻找字符串"hello",肯定不是一行一行用眼睛去扫描,我们只需要打开该文件,使用快捷键Ctrl+F然后在弹出的小框中输入我们要查的”hello”,就能迅速的定位到”hello”字符串了。好了,现在我们可以说说grep了,其实很简单,它的功能和前面所讲windows下的组合键Ctrl+F类似,都是方便我们用来搜索文本的。
既然grep这么有用,那么我们现在一起来学习它,首先准备一个测试文件用来说明grep的用法,如下图所示,各位看官就不要纠结文件内容,内容没有任何意义,纯属只是用来验证grep用法的。
Linux下基本上每个命令都有很多参数,grep也不例外,不要求每个参数都了如指掌,我们只需掌握几个常见的参数就足够应付日常工作所需了,现在一起来看看grep究竟有哪些参数以及这些参数的用途。
01 不参数
grep最简单的用法就是不加任何参数,比如说,我们想要在grep.txt文件中找到含有字符串"hello"的所有行,那么我们可以
02 -n
-n参数可以让你在显示所匹配到的内容时同时显示行号,还是在grep.txt文件中找到含有字符串"hello"的所有行 ,这次我们加了-nc参数,看看和上面的输出有什么不同
03 -i
可以使用-i选项在匹配时忽略大小写,比如说
04 --color
看看上面的输出,还是觉得有点不太爽,输出都是白色字体,我们要找的hello到底在一行的什么位置还是需要我们用眼睛费力的去看,其实,grep提供了一个参数完全可以解放我们这种不必要的劳力,就是--color 参数,不过需要注意的一点是,这是个长选项参数,Linux命令的参数分为长选项参数 和短选项参数,长选项参数前是2个-。好了,还是用上面的文件做个测试看看。
05 -o
在前面的实例中,包含匹配词的行整行都会被打印出来,但是有时候我们并不需要整行打印,只是想看到被匹配的关键词,这时候就需要用到-o 选项了,如下所示。
06 -A / -B / -C
某些情况下,我们不仅需要显示关键词匹配的行,还需要显示所匹配行的前后行信息,这时候就需要用到-A/-B/-C这三个参数了,
其中: -A n(n是一个整数)--->表示将匹配行的后n行也显示
-B n(n是一个整数)--->表示将匹配行的前n行页显示
-C n(n是一个整数)--->表示将匹配行的后n行也显示
看的有点晕?没关系,看看下面的例子就明白了。为了方便阅读,将测试所需的文件内容在此处再贴出来。
07 -v
有时候我们需要反向查找,也就是说,查找的行是不含所给出的匹配词的,-v参数就是实现这个功能的,还是看例子:找出grep.txt文件中不含"hello"的行
以上是关于程序员面试修炼10 | 携程2017秋招笔试题的主要内容,如果未能解决你的问题,请参考以下文章