招银网络科技java春招二面_cvte2018春招前端开发实习面试分享

编程题问题描述:

返回整数数组中出现次数第n多的数字(返回值可能有多个)

最近在找实习,面试二面最后出了一道这样的编程题,当时有思路但语法有错误,而且很紧张,最后没有运行出来,导致凉凉,回来重新思考了一下这个问题,按照当时面试的思路继续完善了一下,实现方法如下:

//思想是,1.先利用对象得到每个数字出现的次数,数字为对象中的键,出现的次数为对象中的值;2.将对象中的值保存为一个新的数组(去重),对新的数组进行从大到小的排序,第n多即为新数组中的第n-1个元素;3.遍历对象,输出值为 新数组中的第n-1个元素 的键

functioncvte(n,arr){//1.用对象的方法可以返回数组中出现次数为n的数字,但不是出现次数第n多的数字

var obj={};for(var i=0;i

obj[arr[i]] += 1;

}else{

obj[arr[i]]= 1;

}

}

console.log(obj);//2.将对象中的值保存为一个新的数组(去重)

var newarr=[];var j=0;for(var k inobj){if(newarr.indexOf(obj[k])==-1){

newarr[j++]=obj[k];

}

}//2.对新数组进行冒泡排序,上一篇博客有提到十种排序算法,这里任选一种

for(var i=0;i

newarr[j]= newarr[j+1];

newarr[j+1] =temp;

flag= false;

}

}if(flag){break;

}

}//或使用sort方法,b-a是从大到小排列,a-b是从小到大排列

//newarr.sort(function(a,b){

//return b-a;

//})

console.log(newarr);//3.输出值为 新数组中的第n-1个元素 的键

var count = newarr[n-1];var result='';for(var k in obj){ //用到了 in 关键字

if(obj[k]==count){

result+= (k + ' ');

}

}

console.log(result);

}

cvte(2,[2,5,8,6,2,3,5,5,9,5]);

我自己总结了一下,写这个题的过程中我错误的点:

1.首先是面试时候我写错了的语法。(其实这个语法是以前看过的,但是没记牢固,每次要用的时候都是去翻语法,本身记笔记没什么不好,但是在面试的时候,特别是手写代码还不让调试,是很考验基本功和基础语法的,所以能记还是尽量记住,这样还能提高写代码的效率,还有就是要多用,多实践)

这是实现对象继承时最简单的遍历对象继承,里面用到的in  关键字

1. 最常用的是在for in 循环中 遍历对象的键

2. 判断属性是否存在于对象中

语法   属性名 in 对象    //返回布尔值true  or  false

//例子

var animal = {

name:"Animal",

sex:"male",

age:5,

bark:function(){

console.log("Animal bark");

}

};

var dog = {};

for (var k in animal){

//k可以获取到对象的每一个属性

//animal [k]可以获取到对象的每一个属性的值

//这里使用k给对象新增属性的时候,不可以使用点语法,因为k是一个字符串

dog[k]= animal[k];

}

2.排序算法,不应该仅仅满足于知道就好,还有动手敲,思考异同,在需要使用时能够信手拈来。

3.以后写类似算法编程题的时候,特别是面试的时候,先把思路整理清楚,在注释中分一二三步写清楚,这样后面在代码实现的过程中思路不会混乱,不会写叉。以后自己再回顾的时候也会一目了然,同时工作之后也方便同事交流,工作交接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值