编程题问题描述:

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

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

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

function cvte(n,arr){
//1.用对象的方法可以返回数组中出现次数为n的数字,但不是出现次数第n多的数字
var obj={};
for(var i=0;i<arr.length;i++){
if(arr[i] in obj){ //用到了 in 关键字
obj[arr[i]] += 1;
}else{
obj[arr[i]] = 1;
}
}
console.log(obj); //2.将对象中的值保存为一个新的数组(去重)
var newarr=[];
var j=0;
for(var k in obj){
if(newarr.indexOf(obj[k])==-1){
newarr[j++]=obj[k];
}
} //2.对新数组进行冒泡排序,上一篇博客有提到十种排序算法,这里任选一种
for(var i=0;i<newarr.length-1;i++){
var flag = true;
for(var j=0;j<newarr.length-i-1;j++){
if(newarr[j]<newarr[j+1]){
var temp = newarr[j];
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.以后写类似算法编程题的时候,特别是面试的时候,先把思路整理清楚,在注释中分一二三步写清楚,这样后面在代码实现的过程中思路不会混乱,不会写叉。以后自己再回顾的时候也会一目了然,同时工作之后也方便同事交流,工作交接。

最新文章

  1. javascript创建多行字符串的方法(转)
  2. outscan 一键批量 get struct2 devMode (CNVD-2016-04656)
  3. log4j使用方法
  4. 按键精灵 句柄 获得句柄 控制windows窗口 后台
  5. “~/Views/Home/Text.aspx”处的视图必须派生自 ViewPage、ViewPage&lt;TModel&gt;、ViewUserControl 或 ViewUserControl&lt;TModel&gt;。
  6. linux C 数组操作
  7. sock_ntop等函数
  8. WPF中对三维模型的控制
  9. ASP.NET 后台打开新页面
  10. Hbase篇--Hbase和MapReduce结合Api
  11. PAT-GPLT训练集 L2-001 紧急救援(最短路)
  12. 用juniversalchardet解决爬虫乱码问题
  13. Web框架Danjgo之session cookie及认证组件
  14. 使用VSCode调试单个PHP文件
  15. 应用Mongoose开发MongoDB(1)数据库连接
  16. 在sublime中使用cppcheck
  17. 类的起源与metaclass
  18. 怎么取消环境变量设置 shell
  19. Django在生产环境中的部署
  20. bzoj1004: [HNOI2008]Cards(burnside引理+DP)

热门文章

  1. gcc 不同版本的安装
  2. 页面数据加载完成时,显示loading页面.数据加载完,loading隐藏.
  3. Symmetric Order
  4. Mybatis配置、逆向工程自动生成代码(CRUD案例)
  5. Spring Bean的作用域以及lookup-method标签的使用
  6. C#-Json-抽象类的反序列化
  7. java中对List中的元素进行排序
  8. js入门之内置数组对象 Array
  9. [LeetCode] 121. 买卖股票的最佳时机 ☆(动态规划)
  10. windows上安装python虚拟环境