题目

在数组中找到出现次数大于N/K 的数

java代码

package com.lizhouwei.chapter8;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* @Description: 在数组中找到出现次数大于N/K 的数
* @Author: lizhouwei
* @CreateDate: 2018/5/7 19:58
* @Modify by:
* @ModifyDate:
*/
public class Chapter8_6 {
public void printHalfMajor(int[] arr) {
int cand = 0;
int times = 0;
for (int i = 0; i < arr.length; i++) {
if (times == 0) {
cand = arr[i];
times++;
} else if (cand == arr[i]) {
times++;
} else {
times--;
}
}
times = 0;
for (int i = 0; i < arr.length; i++) {
if (cand == arr[i]) {
times++;
}
}
if (times > arr.length / 2) {
System.out.println("超过一半的元素为:" + cand);
}
} public void printKMajor(int[] arr, int k) {
Map<Integer, Integer> map = new HashMap<>();
int item = 0;
for (int i = 0; i < arr.length; i++) {
item = arr[i];
if (map.containsKey(item)) {
map.put(item, map.get(item) + 1);
} else if (map.size() ==k - 1) {
allCandMinusOne(map);
} else {
map.put(item, 1);
}
}
Map<Integer, Integer> resultMap = getReals(arr, map);
System.out.print("个数超过" + arr.length / k + "的元素为:");
for (Integer key : resultMap.keySet()) {
if (resultMap.get(key) > arr.length / k) {
System.out.print(key + " ");
}
} } public void allCandMinusOne(Map<Integer, Integer> map) {
List<Integer> removeList = new ArrayList<>();
for (Integer key : map.keySet()) {
map.put(key, map.get(key) - 1);
if (map.get(key) == 0) {
removeList.add(key);
}
}
for (Integer key : removeList) {
map.remove(key);
}
} public Map<Integer, Integer> getReals(int[] arr, Map<Integer, Integer> map) {
Map<Integer, Integer> reals = new HashMap<>();
int item = 0;
for (int i = 0; i < arr.length; i++) {
item = arr[i];
if (map.containsKey(item)) {
if (reals.containsKey(item)) {
reals.put(item, reals.get(item) + 1);
} else {
reals.put(item, 1);
}
}
}
return reals;
} //测试
public static void main(String[] args) {
Chapter8_6 chapter = new Chapter8_6();
int[] arr = {1, 2, 2, 2, 2, 2, 3, 3};
System.out.print("数组{1, 2,2, 2, 2, 3, 3}中");
chapter.printHalfMajor(arr);
int[] arr1 = {1, 2, 2, 2, 2, 3, 3, 3, 3};
System.out.print("数组{1, 2, 2, 2, 2, 3, 3, 3, 3}中");
chapter.printKMajor(arr1,4); }
}

结果

《程序员代码面试指南》第八章 数组和矩阵问题 在数组中找到出现次数大于N/K 的数的更多相关文章

  1. [算法]在数组中找到出现次数大于N/K的数

    题目: 1.给定一个整型数组,打印其中出现次数大于一半的数.如果没有出现这样的数,打印提示信息. 如:1,2,1输出1.    1,2,3输出no such number. 2.给定一个整型数组,再给 ...

  2. 《程序员代码面试指南》第一章 栈和队列 构造数组的MaxTree

    题目 给出一个无重复元素的数组,构造此数组的MaxTree, java代码 /** * @Description: 构造数组的MaxTree * @Author: lizhouwei * @Creat ...

  3. 《程序员代码面试指南》第五章 字符串问题 去掉字符串中连续出现k 个0 的子串

    题目 去掉字符串中连续出现k 个0 的子串 java代码 package com.lizhouwei.chapter5; /** * @Description: 去掉字符串中连续出现k 个0 的子串 ...

  4. 左神算法书籍《程序员代码面试指南》——2_02在单链表和双链表中删除倒数第k个字节

    [题目]分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点.[要求]如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1).[题解]从头遍历链表, ...

  5. 程序员代码面试指南:IT名企算法与数据结构题目最优解

      第1章栈和队列 1设计一个有getMin功能的栈(士★☆☆☆) 1由两个栈组成的队列(尉★★☆☆) 5如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 8猫狗队列(士★☆☆☆)10用一个栈实现另一 ...

  6. 在数组中寻找出现次数大于N/K的数

    给定一个int[]数组,给定一个整数k,打印所有出现次数大于N/k的数,没有的话,给出提示信息. === 核心思想:一次在数组中删除K个不同的数,不停的删除,直到剩下的数的种类不足K就停止删除,那么如 ...

  7. 程序员代码面试指南 IT名企算法与数据结构题目最优解

    原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮 ...

  8. [程序员代码面试指南]数组和矩阵问题-找到无序数组中最小的k个数(堆排序)

    题目链接 https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=13&tqId=11182&t ...

  9. 《程序员代码面试指南》第七章 位运算 在其他数都出现k 次的数组中找到只出现一次的数

    题目 在其他数都出现k 次的数组中找到只出现一次的数 java 代码 package com.lizhouwei.chapter7; /** * @Description: 在其他数都出现k 次的数组 ...

随机推荐

  1. mac搭建安卓开发环境

    下载 android studio,利用android studio自带sdk manager下载安卓sdk,在sdk manager中设置相关代理地址,下载完sdk后,在bash_profile中把 ...

  2. 《C++编程思想》第二章 数 据 抽 象(原书代码+习题+答案)

    相关代码例如以下: 1. <span style="font-size:18px;">/*声明与定义的差别*/ #include <iostream> us ...

  3. sublimetext3打造pythonIDE

    虽然pycharm是非常好用的pythonIDE,用来开发项目很方便,但是修改调整单个或几个小程序就显得很笨重,这时候我们可以选择使用sublime. 一般来说要开发项目我都用pycharm,开发简单 ...

  4. 2017.2.28 activiti实战--第五章--用户与组及部署管理(三)部署流程及资源读取

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(三)部署流程及资源读取 内容概览:如何利用API读取已经部署的资源,比如读取流程定义的XML文件,或流程对应的图片文件. 以 ...

  5. 【MVC2】发布到IIS上User.Identity.Name变成空

    VS中运行时通过User.Identity.Name能取到用户名,发布到IIS上后,该值为空. 调查后发现在网站设定→[认证]中同时打开了[Windows认证]和[匿名认证], 关掉[匿名认证]后就能 ...

  6. Python & Django & Pycharm 安装

    一.下载安装Python 从https://www.python.org/上下载 Python 2.7.6,双击安装包开始安装: 单击“Next”按钮,进入Python安装组件选择界面.这里我们安装全 ...

  7. {}在javascript与(python,java)中的含义区别

    {}在javascript中是对象,其访问属性的方法为 a.name,a['name'],参见http://www.itxueyuan.org/view/6332.html {}在python,jav ...

  8. highcharts 绘制图标的JAVASCRIPT 类库 收藏

    官方站点 : http://www.highcharts.com 演示样例网址 : http://www.highcharts.com

  9. Asp 解析 XML并分页显示

    Asp 解析 XML并分页显示 Asp 解析 XML并分页显示,演示样例源代码例如以下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...

  10. C#中的Dictionary字典类常用方法介绍

    using System.Collections.Generic;//引用命名空间//Dictionary可以理解为散列集合 public class DictionaryTest { public ...