作者:ManfredHu
链接:http://www.manfredhu.com/2016/04/02/15-veryGoodForUsing/
声明:版权所有,转载请保留本段信息,否则请不要转载

几道觉得挺有意思的编程题,感觉做下来,自己对一些新方法的看法有了新的变化。
比如indexOf,reduce,Array.isArray,forEach这些方法,以前一看到兼容性是IE9+就有点害怕,项目中不敢用,导致后面越来越陌生,不过现在一想的话。其实只要用Polyfill或者提前fix掉就可以了。^_^
而且随着浏览器的更新迭代,这些方法肯定会获得更多的支持。

ps:希望新手更要多用这些方法,在特别是学日常学习训练的时候

更新:参加腾讯笔试的编程题,觉得挺有意思的,补上,不过可惜选择语言的时候没有JavaScript。郁闷了好久-_-!!

1. 用reduce统计一个数组中单词出现的次数

var arr = ["apple","orange","apple","orange","pear","orange"];

function getWordCnt(){
//以下应掏空
return arr.reduce(function(prev,next,index,arr){
prev[next] = (prev[next] + 1) || 1; //这句是重点,刚开始都是undefined的时候undefined+1会是NaN
return prev;
},{});
} console.log(getWordCnt());

注意:这里传入了{}作为初始参数,所以第一个prev会是一个空对象,所以第一次的prev[next]会是undefined,而这里用了赋值

2.给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false

function containsRepeatingLetter(str) {
//以下应掏空
return /([a-zA-Z])\1/.test(str); // \1指代第一个括号的匹配项
}

在正则表达式中,利用()进行分组,使用斜杠加数字表示引用,\1就是引用第一个分组,\2就是引用第二个分组。将[a-zA-Z]做为一个分组,然后引用,就可以判断是否有连续重复的字母。

3.已知fn为一个预定义函数,实现函数curryIt

需要补全的代码

var fn = function(a, b, c) {
return a + b + c
};
curryIt(fn)(1)(2)(3); //6 function curryIt(fn) {
//这里补充
}

可以试着玩一下,这里是用的函数的柯里化

var fn = function(a, b, c) {
return a + b + c
};
console.log(curryIt(fn)(1)(2)(3)); //6 function curryIt(fn) {
//以下应掏空
if(typeof fn !== 'function') throw new Error("curryIt():fn must be function");
var len = fn.length; //获取函数形参数量
var slice = Array.prototype.slice;
var arg = slice.call(arguments, 1);
return function() {
arg = arg.concat(slice.call(arguments));
if(arg.length < len) { //当等于函数需要的形参数量时候调用
return arguments.callee;
}else{
return fn.apply(null,arg);
}
}
}

4. 蛇形矩阵(2016腾讯校招编程题)

作为一种常用的数学数列,是由1开始的自然数一次排列成的一个N*N的正方形矩阵,数字一次由外而内的递增,如下面实例:

n=3的蛇形矩阵
1 2 3
8 9 4
7 6 5 n=6的蛇形矩阵
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11 此题要求输入蛇形矩阵宽度N,输出整个蛇形矩阵结果,注意输出格式要求按照矩阵从上至下的依次按行输出,每行中间无需换行输出。 样本输入: 3
样本输出: 1 2 3 8 9 4 7 6 5

自己写的答案(欢迎补充)^_^

//可以把代码复制到Chrome控制台运行
;
(function() {
function fixIsArray() {
if (!Array.isArray) {
Array.isArray = function(arr) {
return Object.prototype.toString.call(arr).slice(8, -1) === "Array";
}
}
}
fixIsArray(); //fix Array.isArray(Array.isArray在IE9+支持) function Arr2D(d) {
if (typeof d !== 'number') throw new Error('Arr2D():arguments d must be number');
this.d = d;
this.arr = this.init2DArr(d);
} Arr2D.prototype.reat2DArr = function() {
var c = 0, //环数
i = 0, //行
j = 0, //列
out = 1, //总数
z,
n = this.d,
a = this.arr; //检验参数
if (!Array.isArray(a)) throw new Error('reat2DArr():arguments a must be Array');
if (typeof n !== 'number') throw new Error('reat2DArr():arguments n must be Number'); z = n * n; while (out <= z) {
i = 0; /*每轮后初始化下i,j*/
j = 0;
for (i += c, j += c; j < n - c; j++) {
if (out > z) break;
a[i][j] = out++;
}
for (j--, i = i + 1; i < n - c; i++) {
if (out > z) break;
a[i][j] = out++;
}
for (i--, j = j - 1; j >= c; j--) {
if (out > z) break;
a[i][j] = out++;
}
for (j++, i = i - 1; i > c; i--) {
if (out > z) break;
a[i][j] = out++;
}
c++;
} return this;
}; Arr2D.prototype.printArr = function() {
var a = this.arr,
n = this.d,
lineStr;
if (!Array.isArray(a)) throw new Error('printArr():arguments a must be Array');
for (i = 0; i < n; i++) {
lineStr = "";
for (j = 0; j < n; j++) {
lineStr += ' ' + a[i][j];
}
console.log(lineStr);
} return this;
}; //初始化二维矩形数组
Arr2D.prototype.init2DArr = function(m) {
var arr = [],
i, j;
for (i = 0; i < m; i++) {
arr[i] = [];
for (j = 0; j < m; j++) {
arr[i][j] = 0;
}
}
return arr;
}; //调用函数,测试数据数据为3
var arr = new Arr2D(3);
arr.reat2DArr().printArr(); })();

5. 大招来了:特别的回文字符串(2016腾讯校招编程题)

所谓回文字符串,就是一个字符串,从左到右和从右到左读是完全一样的。比如”aba”、”c”。
对于一个字符串,可以通过删除某些字符而变成回文字符串,如”cabebaf”,删除’c’,’e’,’f’后
剩下子串’abba’就是回文字符串。
要求,给定任意一个字符串,字符串最大长度1000,计算出最长的回文字符串长度。
如’cabebaf’的回文字符串包括’c’,’aba’,’abba’等,最长回文”abba”长度为4。
输入:字符串
输出:最大的回文字符串长度。
示例:
输入:cabbeaf
输出:4

问题:个人是觉得上面这道题的描述是有问题的,比如cabebaf,那么abeba算不算回文?通常应该是算的。但是按照题目的意思则是abba才算回文,abeba是不算的。

而且这里有干扰项,输入示例的cabbeaf中,要删除字符e才能检测出回文abba。所以这跟普通的回文判断完全不一样。

普通的估计用这样的方法就能判断了

//判断如abba,abeba这样的字符串
function testArr(str) {
//将字符串切割为字符数组,倒序反转再判断跟原来的字符串是否一样
return str.split('').reverse().join('') === str;
}

但是这里不是普通的题目,所以刚开始我想的是用indexOflastIndexOf来做,通过字符串的逐渐缩小范围,indexOflastIndexOf又可以避免要删除字符e的尴尬。

;
(function() {
//输入:cabbeaf
//4
String.prototype.roundWord = function() {
var i = 0,
str = this,
count = 0, //回文计数
left, right = str.length - 1,
max = 0,
flag = false; if (str.length <= 0) throw new Error("roundWord(): arguments str/this must be string"); while (i < str.length) {
charOne = str.charAt(i);
left = str.indexOf(charOne, i); if (!flag) {
right = str.lastIndexOf(charOne);
} else {
right = str.lastIndexOf(charOne, right);
} if (left !== right && left < right) { //头尾有相同字符
if (++count >= max) max = count;
flag = true; //开始有回文
}
i++; }
return count*2;
}; var str = "cababeacf123";
console.log(str.roundWord()); //6
str = "cabbeaf";
console.log(str.roundWord()); //4 })();

JavaScript编程题(含腾讯2016校招题)的更多相关文章

  1. 腾讯2016校招编程题【PHP实现】

    2016腾讯春招的编程题 话不多说,直接上题!!! 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数 . 这道题是以回文为载体, ...

  2. 记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮

    (出处:http://www.cnblogs.com/linguanh/) 前序: 距离  2016 腾讯 TST 校招面试结束已经5天了,3月27日至今,目前还在等待消息.从投简历到两轮电面,再到被 ...

  3. Javascript编程风格

    Douglas Crockford是Javascript权威,Json格式就是他的发明. 去年11月他有一个演讲(Youtube),谈到了好的Javascript编程风格是什么.我非常推荐这个演讲,它 ...

  4. javascript编程: JSON, Mapping, 回调

    使用 Javascript  编程, 组合使用 JSON 数据格式,Mapping 和回调技术, 可以产生很强的表达效果. 在实际工作中, 总会有数据汇总的需求. 比如说, 取得了多个 device ...

  5. javascript编程的最佳实践推荐

    推荐的javascript编程的最佳实践,摘要记录在这里: 可维护的代码保证代码的性能部署代码 1 可维护的代码1.1什么是维护的代码:可理解性——其他人可以接手代码并理解它的意图和一般途径,而无需原 ...

  6. Javascript编程模式(JavaScript Programming Patterns)Part 1.(初级篇)

    JavaScript 为网站添加状态,这些状态可能是校验或者更复杂的行为像拖拽终止功能或者是异步的请求webserver (aka Ajax). 在过去的那些年里, JavaScript librar ...

  7. 实践javascript美术馆的小案例,学习到的东西还是蛮多的,包括javascript编程中的预留退路、分离javascript、以及实现向后兼容等

    javascript美术馆(改进2) 一.javascript编程过程中的好习惯 1.实现预留退路 js被禁掉,图片也可以显示出来,href属性带有图片路径 <script src=" ...

  8. 【HANA系列】SAP HANA XS使用JavaScript编程详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...

  9. 学习现代 JavaScript 编程的最佳教程

    天天编码 , 版权所有丨本文标题:0.0 学习现代 JavaScript 编程的最佳教程 转载请保留页面地址:http://www.tiantianbianma.com/the-modern-java ...

随机推荐

  1. 使用Ansible部署etcd 3.2高可用集群

    之前写过一篇手动搭建etcd 3.1集群的文章<etcd 3.1 高可用集群搭建>,最近要初始化一套新的环境,考虑用ansible自动化部署整套环境, 先从部署etcd 3.2集群开始. ...

  2. 10-string类的length()返回值一起的问题

    c++ string类length()(size())函数返回值–无符号数 首先,先来发现问题 string s = ""; for(int i = 0; i < s.len ...

  3. SyntaxError: Non-ASCII character '\xe5' in file D:/pcode/xx.py on line 21, but no encoding declared

    from selenium import webdriver from datetime import * import time starttime = datetime.now() print ( ...

  4. Linq和EF 做 单一条件查询 和 复合条件 查询 以及 多表 联合查询 示例

    单一条件查询: var table2Object = (from t1 in db.table1 join t2 in db.table2 on t1.id equals t2.id select t ...

  5. APScheduler 浅析

    前言 APScheduler是python下的任务调度框架,全程为Advanced Python Scheduler,是一款轻量级的Python任务调度框架.它允许你像Linux下的Crontab那样 ...

  6. 运行代码后出现Process finished with exit code 0是为什么?

    Process finished with exit code 0 意味着你的程序正常执行完毕并退出. 可以科普一下exit code,在大部分编程语言中都适用: exit code 0 表示程序执行 ...

  7. DB2频繁出现死锁,常用解决问题的命令

    --DB2频繁出现死锁,常用解决问题的命令db2 get snapshot for locks on sampledb2 get db cfg for sampledb2 update db cfg ...

  8. forbidden

  9. js 和 css 中 不能使用 jsp 页面中一些 标签 和 java 代码等,应注意

    js  和 css 中 不能使用 jsp  页面中一些 标签 和 java 代码等,应注意 如 ${ }  <%%>  等

  10. MetroApp保存UIEment为图片

    写本文的起因是想截取Metro App画面作为图片来使用Win8的共享. 话说自从大MS的客户端UI技术进入XAML时代之后,每次截屏的代码都不太一样,无论silverlight.WPF还是Windo ...