算法总结之 在数组中找到出现次数 > N/K的数

给定一个整型数组arr,再给定一个整数k,打印所有出现次数大于n/k的数,如果没有这样的数,请打印”-1“。 import java.util.Scanner; import java.util.TreeMap; import java.util.Iterator; import java.util.Map; public class Main{ // 用于存储n/k的值 public static int nlk; // 利用表存储数据 p... 阅读详情

算法总结之 在数组中找到出现次数 > N/K的数

题目1 

给定一个整型数组arr,  打印其中出现次数大于一半的数, 如果没有这样的数,打印提示信息

 

进阶

给定一个整型数组arr, 再给定一个整数K, 打印所有出现次数大于 N/K的数,如果没有这样的数字,打印提示信息

 

题目的思路是:

一般都思路是 哈希表记录每个数跟出现的次数,但是额外空间复杂度是O(N)

现在提供一个方法,核心思想是:

  一次在数组中删掉K个不同的数,不停的删除,知道剩下的数种类不足K就停止删除, 那么,如果在数组中出现的次数大于 N/K, 则这个数最后一定会被剩下

说白了就是:数组,与次数有关的 可以使用删除法 。 类似于 拿着相同的数去干掉不同的,剩下的就是阵容强大的那一组。  

在删除时候使用的策略是,记录当前位置的数,遍历下一个,如果不一致那就可以ko掉一个。

 

题目1 : 每次一次在数组中删掉两个不同的数,不停的删除,直到剩下的数只有一种。   一个干一个,一个干掉一个(逻辑干掉,time的减少。当前的和下一个去抵消,最后看看剩下个啥子)

 

package TT;

public class Test66 {

     public static 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 = 1;
             }else if(arr[i]== cand){
                 times++;
             }else{
                 times--;
                 }
             
         }
         times = 0;
         for(int i =0; i!=arr.length; i++){
             if(arr[i] == cand){
                  times++;
             }
             
         }
         if(times > arr.length/2){
             System.out.println(cand);
         }else {
            System.out.println("no such number");
        }
         
     }
   
     public static void main(String[] args){
         
            int[] arr = new int[6];
            arr[0]=2;
            arr[1]=1;
            arr[2]=2;
            arr[3]=4;
            arr[4]=2;
            arr[5]=2;
          
            printHalfMajor(arr);
         
     }
   
}

我再用比较繁琐一些,容易理解上一些。核心的思想: 拿出record去一直做pk,一直pk的条件是times这个能量值不为0。 

                                                                                        如果record为0,那么下台,换一个,从新去跟后面pk。

public class Test8 {
   public  static  Integer   getNumOverHalf(int[] arr){
       if (arr.length<=2 && arr.length%2 !=0){
           throw  new RuntimeException("长度不够!") ;
       }
       int times = 0 ; //剩下的数量
       int record= 0;
       for (int i=0; i<arr.length; i++){
           if (times==0){ //如果剩余量为0 那么记录下当前的 然后继续加
               record=arr[i];
               times  = 1;
           } else if (arr[i]!= record){
               times--;
          }else if (arr[i]==record){
               times++;
           }
       }
       times=0;
       for (int i=0; i<arr.length; i++){
           if (arr[i]==record){
               times++;
           }
       }
       if (times == (arr.length/2)){
          return  record;
       }else {
           System.out.println("没有!");
           return null;
       }
    }
    public static void main(String[] args) {
       int[] arr = {1,2,4,3,4,4};
       System.out.println(getNumOverHalf(arr));
    }
}

 数组,与次数有关的 可以使用删除法 。 类似于 拿着相同的数(record下来的)去干掉不同的,剩下的(record下来的)就是阵容强大。 然后统计下留下的这个(占有量做多的),再去遍历数组进行检验。就OK了 

 

posted @ 2017-08-26 21:20 toov5 阅读( ...) 评论( ...) 编辑 收藏
【搞定算法】找出数组中出现次数大于数组长度一半和 N/K 的数 博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验。 目 录: 1、找出数组中出现次数大于数组长度一半的数 2、找出数组中出现次数大于数组长度 N/K 的数 1、找出数组中出现次数大于数组长度一半的数 一个数组中出现次数大于数组长度一般的数显然最多只有一个。 题目:在数组中找到出现次数大于数组长度一半的数。... 阅读详情

相关推荐

算法:O(n)时间内在数组中找到第k个小的数

从一个长度为n的无序数组中,找到第k小的那个数,被称为k-select问题。我们经常见到的问题:找到中位数,找到第二个大的数,都是这个问题的特例。算法的复杂度是O(20n),当选择为5个数为一个小集合时。OJ风格的完整代码如下:#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; #include&lt;...

old_memory的博客 2020

找出数组中所有出现次数大于n/k的元素

找出数组中所有出现次数大于n/k的元素

liudeneng1234的博客 646

【算法刷题】找出数组中出现次数大于N/K的所有元素

数组中出现次数超过一半(可实现时间复杂度o(n),空间复杂度o(1))的进阶版鸽巢原理:出现次数大于N/K的元素的个数至多为(M-1)个思路:每次从数组中删除k个不同的元素,直到不能再删了为止。那么最后数组中剩余的元素就是候选元素。因此  可建立一个k长度的map记录从数组中待消的元素,例如数组a={4,3,3,9,4,2,1,4,3,4,9,2}  N=12,k=3 ,则每次应该删3个数,依次遍...

Neo_dot的博客 2606

程序员代码面试指南刷题--第八章.在数组中找到出现次数大于n/k的数

题目描述 给定一个整型数组arr,再给定一个整数k,打印所有出现次数大于n/k的数,如果没有这样的数,请打印”-1“。 输入描述: 输入包含两行,第一行输入包含两个整数n和k,第二行包含n个整数,代表数组arr。 输出描述: 输出所有出现次数大于n/k的数,如果没有这样的数,请输出”-1“。 示例1 输入 7 7 1 2 3 1 2 3 4 输出 1 2 3 解法一:利用map import java.io.*; import java.util.*; public class Main{

我不是什么好人 773

查找出现次数大于n/k的重复元素 ---非多重集算法

本文是对一篇英文论文的总结:Finding Repeated Elements。想看原文,请Google之。 这个问题的简单形式是“查找出现次数大于n/2的重复元素”。我们先从简单问题开始,然后再做扩展。 1.查找出现次数大于n/2的重复元素   《编程之美》中有同样的一道题《寻找发帖水王》,具体思路是每次删除两个不同的元素,最后剩下的就是要求的元素。这个结论的证明如下:   已知:n,m

mdj67887500的专栏 3724

基于微信小程序的扫码签到系统源码

大等于jdk1.8,大于mysql5.5,idea(eclipse),微信开发者工具。代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。签到管理:新增签到,点击查看码展示二维码(有时效性)springboot mybatis 小程序。签到管理:查看用户创建的签到,可删除。用户管理:查看注册用户信息,及删除。签到记录:查看用户签到记录:可删除。个人信息:展示个人信息,可修改。统计分析:查看用户,签到数量。签到记录:查看用户签到记录。登录注册(含授权登录)我的签到:查看签到记录。

wfuhui的博客 5224

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

给定一个int[]数组,给定一个整数k,打印所有出现次数大于N/k的数,没有的话,给出提示信息。 === 核心思想:一次在数组中删除K个不同的数,不停的删除,直到剩下的数的种类不足K就停止删除,那么如果一个数在数组中出现的次数大于N/K,则这个数最后一定会被剩下来。 解法:设立(K-1)个候选cand,以及(K-1)个times统计。 过程如下:   遍历到arr[i]时,看arr[i]...

weixin_30781631的博客 338

双传声器法测量吸声材料的吸声系数(公式推导与解释)

在双传声器法中,通过测量两个位置的声压 p1和 p2​,可以分离出入射波和反射波的声压分量。双传声器法一般在阻抗管中进行,阻抗管的一端为平面波声源,另一端放置待测材料。两个传声器放置在靠近材料的阻抗管内,用于测量管道内的声压。双传声器法是一种常用于测量材料吸声系数的实验方法,通过在管道内使用两个传声器测量声波的入射和反射,来计算出材料的吸声系数。当测试样品较少时,测试时,需要交换两个传声器的位置,目的是为了相位校准。

m0_57407372的博客 1875

【困难】在数组中找到出现次数大于N/K的数-Java:进阶问题

package live.every.day.ProgrammingDesign.CodingInterviewGuide.ArrayAndMatrix; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * 在数组中找到出现次数大于N/K的数 * * 【题目】 * 给定一个整型数组arr,打印其中出现次数大于一半的数,如果没有这样的数,打

了解➔熟悉➔掌握➔精通 603

阅文集团大数据面试题及参考答案

在 Flink 中,watermark 是一种用于处理乱序事件时间的机制。实现接口:通常需要实现 AssignerWithPeriodicWatermarks 或 AssignerWithPunctuatedWatermarks 接口。前者会周期性地生成 watermark,后者则是基于某些特定事件来生成 watermark ,比如接收到某个特定值的消息时。定义位置:可以在数据源处或者在流处理的中间操作中定义 watermark。在数据源定义时,能更精准地根据数据的产生特性设置 watermark;

大模型大数据攻城狮的专栏 1089

【突变检验合集】含Pettitt突变检验等

突变检验方法合集

WW、forever的博客 3534

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

分析数组中出现次数大于 N/K 的数之前,先来看一道简单的题目。 1、找出数组中出现次数大于数组长度一半的数 分析: 1、在数组中一次同时删掉两个不同的元素,如果存在某个数出现次数大于数组长度的一半,那么即使每次都删,最后也会至少剩下 1 个(不可能存在两个候选人,因为不可能存在两个数都超过一半); 2、第一个数字作为第一个士兵即候选人 candiate,守阵地;candiate = 1 记录候选人个数;遇到相同元素,count++; 遇到不相同元素,即为敌人,同归于尽,count- -;当遇到 count

八戒的博客 1105

磁环电感参数计算

电感饱和是指当电感中的电流超过一定阈值时,电感中的磁场无法继续增加,而是达到一个饱和状态,导致电感的感应电动势减小或消失。电感通常由线圈组成,当通过线圈的电流不断增加时,线圈内部的磁场也随之增加。然而,当电流达到一定程度时,线圈的铁芯磁化达到饱和,无法进一步增加磁场强度。电感饱和的阈值取决于电感的结构、材料和尺寸等因素。通常情况下,电感的额定电流会标明其饱和电流值。一旦电感中的电流超过了饱和电流,电感将饱和并出现异常行为。当我们谈论电感饱和的时候,实际上是在谈论磁芯饱和——空心的电感永远不会饱和。

小幽余生不加糖 4033

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

题目 给定整数数组arr,打印其中出现次数大于一半的数, 如果没有这样的数,打印提示信息。 进阶问题: 给定整数数组arr,打印其中出现次数大于N/K的数,如果没有这样的数,打印提示信息。 要求 原问题要求时间复杂度O(n), 空间复杂度O(1), 进阶问题要求时间复杂度O(N×K),额外空间O(K) 解答 核心思路:一次在数组中删掉K个不同的数,不停地删除,直到剩下数的种类不足K就停止删除,那么...

Iris_6713的博客 704

在 SAP 中启用应收/应付“代扣税(Withholding Tax)”功能,本质上是激活并配置“扩展代扣税(Extended Withholding Tax)”模型

摘要:SAP中启用应收/应付代扣税功能需完成3个层级12个核心步骤:1)全局激活公司代码代扣税功能;2)配置代扣税规则、税率和科目,包括定义税种类型、代码、总账科目等;3)在供应商/客户主数据中关联代扣税设置。完成后系统可在发票或付款环节自动计算并过账代扣税,支持多税种并行计算和税率年度调整,最终生成税务报表。常见问题排查需检查公司代码激活状态和主数据配置。(149字)

金牌架构师 836

python语言字符串练习题

描述:find()方法检测字符串中是否包含子字符串str,如果指定 beg(开始)和end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串,返回字符串中,子字符串第一个字符的索引值,否则返回-1。描述:find()方法用来检测字符串中是否包含子字符串str,在指定范围内,如果包含子字符串,返回字符串中,子字符串第一个字符的位置,否则返回-1。命令行先后输入两个字符串,然后利用find()方法找出第二个字符串在第一个字符串中出现的位置。本关需要你编写一个程序,输出字符串的长度。

国家一级致癌物 2026

找出数组中出现次数大于n/2、n/3,n/k的数

1.找出数组中次数大于n/2的元素 说明:算法空间复杂度o(n),时间复杂度o(1) 数组中次数超过n/2的数最多1个,设置一个频率数,前一个数和后一个数相同,频率+1, 否则-1,只要有数频率超过数组长度一半,最终这个频率肯定大于0. public static int solve2(int [] array) { if(array == null || array.length ==...

大鹏视界U 2161

Java与OSG的梦幻联动:深入编译OpenSceneGraph的Java JNI桥梁,开启3D视觉盛宴的奇幻之旅

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀在编译OpenSceneGraph (OSG) 的Java版本时,首先需要了解OSG本身是一个主要用于3D图形和视觉仿真的开源库,它主要支持C++。然而,OSG 也支持通过JNI(Java Native Interface)与Java集成,这允许Java程序调用OSG的C++库。

java专栏 871

书籍在数组中找到出现次数大于N/K的数(8)0617

具体的过程为,一次在数组中删掉两个不同的数,不停地删除,知道剩下的数只有一种,如果一个数出现次数大于一半,这个数最后一定会剩下来。综上所述,第一个for循环的实质就是我们的核心解题思路,一次在数组中删掉两个不同的数,不停地删除,知道剩下的数只有一种,如果一个数出现次数大于一半,则这个数最后一定被剩下来,也就是最后的cand值。方法的核心思想,一次在数组中删掉K个不同的数,不停地删除,直到剩下数的种类不足K就停止删除,那么,如果一个数在数组中出现了次数大于N/K,则这个数最后一定会被生下来。

qq_30750287的博客 361

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

剑指offer.数组中出现次数超过一半的数字、在数组中找到出现次数大于n/k的数

题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 解题思路 思路一:基于快排思想 思路二:如果有符合条件的数字,则它出现的次数比其他所有数字出现的次数和还要多。 在遍历数组时保存两个值:一是数组中一个数字,一是次数。遍...

没有感情的刷题机器 439

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

找出数组中出现次数大于N/K的所有元素

转载自https://blog.youkuaiyun.com/Neo_dot/article/details/80642008 https://blog.youkuaiyun.com/u013309870/article/details/69788342 有一个整形数组,长度为n,有一个比较小的数k,求数组中出现次数多于n/k的数字 要求空间复杂度O(k),时间复杂度O(k*n) 思路:每次从数组中删除 K 个不同的数,...

summer2day的博客 954

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[面试真题]-[字节跳动]-找到数组中出现次数大于N/k的数

【题目】 给定一个整型数组arr,再给定一个整数k,打印所有出现次数大于 N/K 的数。如果没有这样的数,打印提示信息。 【要求】 时间复杂度为O(N*K),额外空间复杂度为O(K)。 【思路】 每次从数组中删除 K 个不同的数,如果某个数的次数大于 N/K ,这个数最后肯定会剩下来,数学证明:假设 X 的次数为 (N/k+1) > N/K ,如果每次删除 k个不同的数最后数组里面剩余的数里...

jessio的博客 731

在一个数组中找到第k小的数(线性时间选择)

在一个数组中找到第k小的数(线性时间选择) 在这一部分,我们讨论的题目为元素选择问题。这类题目的一般问法为:给定线性序集中n个元素和一个整数k,1 <= K <= n,要求找出这n个元素中第k小的元素,如(1,4,3,2,5)中第一小的元素就是1,第5小的元素就是5,第2小的元素就是2。 在某些特殊情况下,很容易设计出解选择问题的线性时间算法。如:当要选择最大元素或最小元素时,显然...

IT_Quanwudi的博客 7059

笔试面试算法经典-找到数组中出现次数大于N/k的数(Java)

【题目】 给定一个整型数组arr,再给定一个整数k,打印所有出现次数大于 N/K 的数。如果没有这样的数,打印提示信息。 【要求】 时间复杂度为O(N*K),额外空间复杂度为O(K)。【思路】 每次从数组中删除 K 个不同的数,如果某个数的次数大于 N/K ,这个数最后肯定会剩下来,数学证明:假设 X 的次数为 (N/k+1) > N/K ,如果每次删除 k个不同的数最后数组里面剩余的

有图有真相 6660

【leetcode】找出数组的第k大的数

用快排,原始的快排 def quick_sort(nums,l,r): if l<=r:return tmp = nums[0] while l<r: while l<r and nums[r]>tmp: j-=1 nums[j],nums[i]=nums[i],nums[j] ...

littlemichelle 6711
上一篇: 算法总结之 需要排序的最短子数长度
下一篇: 算法总结之 在行列都排好序的矩阵中找数
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值