查找数组中的个数,要求复杂度越小越好。

例如

输入:数组[1,2,2,3]

输出:1(1)

2(2)

3(1)

解题思路:

复杂度越小越好的话,想到用map来存储数值和个数的映射关系,这样就不用二重循环,用一层就可以了,复杂度是O(n)。

其中遇到的错误是要从控制台输入数组1,2,2,3,这些以,隔开存到String类型的数组,然后再将其转换为integer类型的。

注意:从控制输入,要包含包io;要有try,catch处理异常。

try{

}catch(NumberFormatException|IOException e){

e.printStackTrace();

}

import java.util.*;
import java.io.*;
public class countNum {public static void main(String []args){String[] array = null;Map<Integer,Integer> m=new HashMap<Integer,Integer>();BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));try {String temp=bf.readLine();array=temp.split(",");} catch (NumberFormatException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}for(int i=0;i<array.length;i++){int temp=Integer.parseInt(array[i]);if(m.containsKey(temp)){m.put(temp, m.get(temp)+1);}else{m.put(temp, 1);}}for(Integer in:m.keySet()){int val=m.get(in);System.out.println(in+"("+val+")");}}
}

第二种解法,复杂度是o(n).

思路:直接判断前后数字是否一样,一样的话num+1;不一样的话直接输出

public static void main(String[] args) {Scanner sc=new Scanner(System.in);int num=0;  String[] arr=sc.nextLine().split(",");int len=arr.length;for(int i=0;i<len-1;i++){int j=i+1;//下一个数值if(!arr[i].equals(arr[j])){//java中比较字符串的值,用equeals方法int t=num+1;//之前的个数加上自己,所以是num+1System.out.println(arr[i]+"("+t+")");num=0;  //重置num}else{num++;//和下一个值相同的话num+1      }   }//输出数组中最后一个数值的个数;即使之前又相同的也在这输出,即使没相同的也在这输出System.out.println(arr[len-1]+"("+(++num)+")");}

欢迎大家批评指正……

补充:练习了几道编程题,回过头来看这个,发现完全可以将时间复杂度减小到o(logn)。做法:在上边代码的基础上,使用二分查找。这样就能减少复杂度了。大家可以试试。  2017.4.13

2017腾讯实习生招聘笔试编程题相关推荐

  1. 2018腾讯实习招聘笔试编程题之翻转数列

    题目描述:小Q定义了一种数列称为翻转数列                  给定整数n和m,满足n能被2m整除.对于一串连续递增整数数列1,2,3,4...,每隔m个符号翻转一次,最初符号为'-'   ...

  2. 米哈游 2020 年实习生招聘笔试编程题2——最少的移除

    题目描述 如果一个字符串中的括号是成对出现的且闭合顺序无误则称该字符串为标准字符串.给你一个字符串,该字符串由左括号右括号和英文字母组合而成,请你移除最少数目的括号,使得它成为一个标准字符串,并返回修 ...

  3. 米哈游 2020 年实习生招聘笔试编程题1——最大不相交连线数

    题目描述 有A.B两个数组,相同数字可以连成一条线,求两个数组中相同数字不相交的最大连线数. 思路分析 求两个数组中相同数字不相交的最大连线数,其实就是求两个数组的最长公共子序列的长度.很明显,这是一 ...

  4. 2018腾讯实习招聘笔试编程题之安排机器

    题目描述:小Q的公司最近接到m个任务,第i个任务需要Xi的时间去完成,难度等级为yi.                 小Q拥有n台机器,每台机器最长工作时间zi,机器等级wi.           ...

  5. 华为2019实习生招聘软件编程题

    华为2019实习生招聘软件编程题 题目这里就不再重复,当时只ac了两题,第三题是实现一个高精度乘法,由于调试的时候,一直有个bug没搞出来,后来才发现是模拟手算的一个双重循环中 for(int i=0 ...

  6. 腾讯实习生招聘笔试题目

    2013腾讯实习生笔试题  一. 单项选择题 1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项() Int a1=x+y-z; int b1=x*y/z; Int a2=x- ...

  7. 奇虎360_2017校园招聘笔试编程题第一题

    今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第一题. 1. 题目 2. 输入输出及样例 3. 我的思路 这题应该看题目理解一下就有思路,最简单粗暴的就是创建一个二维数组in ...

  8. 奇虎360_2017校园招聘笔试编程题第二题

    今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第二题.第二道题也不难想到思路,但是如果写法不当,可能无法满足题目的时间限制. 1. 题目 2. 输入输出及样例 3. 我的思路 ...

  9. 2017百度实习生招聘笔试真题编程题集合

    1,买帽子 AC代码如下: import java.util.HashSet; import java.util.Scanner; import java.util.Set; import java. ...

  10. 2017网易游戏雷火盘古实习生招聘笔试真题

    1.给定一个字符串,请你将字符串重新编码,将连续的字符替换成"连续出现的个数+字符".比如字符串AAAABCCDAA会被编码成4A1B2C1D2A. #include<std ...

最新文章

  1. petshop4.0数据库分析一:数据库概览
  2. Regex解析字符串
  3. 阿里云城市数据大脑开发规范
  4. JZOJ 5183. 【NOIP2017提高组模拟6.29】小T的钢琴
  5. TypeScript class 的静态成员变量
  6. SugarCRM 去掉 模块标题左边的 问号 和 帮助
  7. IOS学习之多线程(2)--创建线程
  8. hive --metastore三种模式
  9. 单独的REST JSON API服务器和客户端? [关闭]
  10. MySQL-(1)查看用户权限、(2)用户授权、(3)删除用户权限 语法格式总结
  11. linux没有telnet命令
  12. ps画画模糊笔刷_PS十个必须知道画笔的使用技巧
  13. C解决duplicate symbol
  14. Oracle 19c 新特性:ANY_VALUE 函数和 LISTAGG 的增强
  15. Python 助你填写高考志愿
  16. 商业数据分析-战略分析读后感
  17. wangEditor粘贴word图片问题解决
  18. CMake I 设置编译器标志
  19. Use Configs
  20. JavaScript:实现复制粘贴剪切功能

热门文章

  1. Win10自带的邮件email上如何登录qq邮箱
  2. 桌面图标出现蓝色问号
  3. 电脑显示受限制无连接应该怎么办
  4. MTTR、MTBF、MTTF、可用性、可靠性傻傻分不清楚?
  5. CentOS 安装字体
  6. Android日历操作
  7. Tomcat CVE-2020-1938(CNVD-2020-10487) 漏洞复现
  8. tdr 定位公式_时域反射计TDR原理详细解析
  9. 基于SSH开发报刊订阅管理系统的设计与实现
  10. suffix arrary