(关于一个算法题的两点新思路)给你一组字符串 如 {5,2,3,2,4,5,1,2,1,5},让你输出里面出现次数最多且数值最大的一个,出现几次

在网上看到一个算法题,不是很难,搜一下也有解决办法,但是一般都是几层for循环,试着写了下

 /**
     * 给你一组字符串 如 {5,2,3,2,4,5,1,2,1,5},让你输出里面出现次数最多且数值最大的一个,出现几次
     * 优点:时间复杂度为O(n)
     * 缺点:产生一些多余的空间,如 6,7,8没有的数也会分配一个数组空间,但是基本可以忽略
     * 限制:需要预先知道最大的值是多少,或者说小于多少,这样才好确定预先分配一个数组长度是多少
     */
    public static void method1(){

    	 int[] datas = {5,2,3,2,4,5,1,2,1,5};
    	 int[] nums = new int[10];//0-9,此处若数组中的最大值为 123,则数组长度应为 >= 124
    	 for (int i = 0; i < datas.length; i++) {
			int n = datas[i] - 0;
			nums[n]++;
		 }

    	 int maxTime = 0;
    	 for (int i = 0; i < nums.length; i++) {

			System.out.println(i+":"+nums[i]);
			if(nums[i] > maxTime){
				maxTime = nums[i];
			}
		 }

    	 System.out.println("最多的出现"+maxTime+"次");

    	 int num = 0;
    	 for (int i = 0; i < nums.length; i++) {
    		 if(maxTime == nums[i]){
    			 num = i;
    		 }
 		 }

    	 System.out.println("出现次数最多:"+maxTime+"次;且最大的数是:"+num);

    }

    /**
     * 给你一组字符串 如 {5,2,3,2,4,5,1,2,1,5},让你输出里面出现次数最多且数值最大的一个,出现几次
     * 优点:时间复杂度为O(n)
     * 缺点:暂时没发现
     */
    public static void method2(){

    	int[] datas = {5,2,3,2,4,5,1,2,1,5};
    	Map<Integer,Integer> map = new HashMap<Integer, Integer>();
    	for (int i = 0; i < datas.length; i++) {
    		Integer key = datas[i];
			Integer value = map.get(key);
			if(value != null){
				map.put(key, ++value);
			}else{
				map.put(key, 1);
			}
		}

    	int maxTime = 0;
    	int maxTime_num = 0;
    	Set<Integer> keySet = map.keySet();
    	Iterator<Integer> it = keySet.iterator();
    	while(it.hasNext()){
    		Integer key = it.next();
    		Integer value = map.get(key);
    		System.out.println(key+":"+value);

    		if(value >= maxTime){
    			maxTime = value;
    			if(key > maxTime_num){
    				maxTime_num = key;
    			}
    		}
    	}
    	System.out.println("出现次数最多:"+maxTime+"次;且最大的数是:"+maxTime_num);

    }

打印:

0:0

1:2

2:3

3:1

4:1

5:3

6:0

7:0

8:0

9:0

最多的出现3次

出现次数最多:3次;且最大的数是:5

-----------

1:2

2:3

3:1

4:1

5:3

出现次数最多:3次;且最大的数是:5

两者的区别应该一下就看出来了

时间: 2024-10-05 05:05:53

(关于一个算法题的两点新思路)给你一组字符串 如 {5,2,3,2,4,5,1,2,1,5},让你输出里面出现次数最多且数值最大的一个,出现几次的相关文章

一个算法题,又是小明。囧

第一次写博客文章,有点小紧张.若是有什么错误还望众大神指点.为了备战下个月的蓝桥杯,苦战算法题,觉得有一道题不错,就拿来分享一下. 原文如下:地宫取宝,X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出口在右下角.小明被带到地宫的入口,国王要求他只能向右或向下行走.走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿).当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可

2015阿里秋招其中一个算法题(经典)

写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值.请注意程序效率 这是2015阿里秋招的一个在线笔试题 实现方法很简单,遍历一遍二叉树,找出最大最小,一相减就可以求出最大的差值 之前在做题的时候居然写递归的方法求值,后面测试了一下,果然结果不对 只要是非递归的的方法遍历都可以很容易找出最大值最小值,效率也比较高,时间复杂度为O(n). 下面是我用非递归从上往下遍历二叉树的方法 用队列容器即可方便实现. 我写的代码: #include

一个算法题:括号匹配问题。

问:给予一个字符串为:']]][]]]][[[[[[]]]]',请写出程序求出其有多少对'[]'? 一般这种问题都是想让你通过数据结构去处理,仔细回想一下我们学过的数据结构,栈的先进后出是否能处理这个问题?将字符串遍历,遇到左方括号 '[' 时将其压入栈中,遇到右方括号 ']'时取出栈顶元素匹配,并将对数加1,这样最后我们就求出来能有多少对方括号了. 栈的示意图: 流程图: 通过分析,我们使用PHP编码实现这个功能: //括号匹配问题 $str = ']]][]]]][[[[[[]]]]'; /

python遇到一个算法题 , 顺手做了 ,但是跑不出结果......

def d(i): sumInt = 0 sumInt = sumInt + start if i % start == 0 for start in range(1,i) return sumInt print(str(sum([d(i) for i in range(1, 10**12)]))[-12:]) 求1<=i<=10**12范围内所有d(i)的和的末12位,d(i)表示i的正约数的和,i为整数

海量日志数据__怎么在海量数据中找出重复次数最多的一个

问题一:         怎么在海量数据中找出重复次数最多的一个 算法思想:         方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数. 然后找出上一步求出的数据中重复次数最多的一个就是所求(如下). 问题二: 网站日志中记录了用户的IP,找出访问次数最多的IP. 算法思想:       IP地址最多有2^32=4G种取值可能,所以不能完全加载到内存中. 可以考虑分而治之的策略: map 按照IP地址的hash(IP)%1024值,将海量日志

一道有趣的算法题:仿照Excel的列编号,给定一个数字,输出该列编号字符串

       By Long Luo 最近遇到一个算法题: 仿照Excel的列编号,给出一个数字,输出该列编号字符串. 例如:A对应1,Z对应26,AA对应27,AZ对应52 ...... 这个题目是一个典型的26进制思路去处理,但是这个题目里面有很多陷阱,在1, 26, 52等特殊情况进行考虑,经过晚上接近1个小时的编写,完成的代码如下: C++代码如下: #include <iostream> #include <string.h> using namespace std; /

程序员面试金典算法题

空格替换 题目描述 请编写一个方法,将字符串中的空格全部替换为"%20".假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成. 给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string. 测试样例: "Mr John Smith",13 返回:"Mr%20John%20Smith" "Hello World&qu

常见算法题合辑(一)

这一章的内容,有些之前已经在微信公众号中将详细的思路及步骤汇总过,有些之后可能会再找时间对其进行分析,这里只将最终实现罗列出来,难易程度不分先后,算法复杂度不保证是最优,留给大家空间自行思考,当然,本章用的是C#语言进行编码,大家可以使用自己熟悉的语言将这些算法实现一遍哦~ 如果你有什么有趣的算法题或者没能解决的算法题,也可以留言给小编,让我们一起玩转算法~ 1. 冒泡排序 这个算是所有算法中最为简单的了,实现方法如下: 2. 插入排序 从排序算法来看,这个算法也是属于比较简单的了,实现方法如下

js算法题

//较Low,看到的大神 帮补充 1.给定一个数组:,定义一个函数获取数组中所有的奇数,返回一个新数组:var arr1=[1,3,4,5,6,7,8,3,4,2,3,6];    function odd(arr){        var newArr=[]        for(var i =0; i<arr.length;i++){            if(arr[i]%2!=0){                newArr.push(arr[i])            }