首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2021-04-17:给定一个整型数组 arr,数组中的每个值都为正数,表示完成

2021-04-17:给定一个整型数组 arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再 给定 一个整数 num,表示画匠的数量,每个画匠只能画连在一起的画作。...所有的画家 并行工作,请 返回完成所有的画作需要的最少时间。【举例】arr=3,1,4,num=2。最好的分配方式为第一个画匠画 3 和 1,所需时间为 4。第二个画匠画 4,所需时间 为 4。...如果分配方式为第一个画匠画 3,所需时 间为 3。第二个画 匠画 1 和 4,所需的时间为 5。那么最少时间为 5,显然没有第一 种分配方式好。所以返回 4。arr=1,1,1,4,3,num=3。...最好的分配方式为第一个画匠画前三个 1,所需时间为 3。第二个画匠画 4,所需时间 为 4。 第三个画匠画 3,所需时间为 3。返回 4。 福大大 答案2021-04-17: 二分法。...分割数组的最大值

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 集合(Collection)

    集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。...哈希表(Hashtable) 它使用键 来访问集合中的元素。 当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。...排序列表(SortedList) 它可以使用键 和索引 来访问列表中的项。 排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。...如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。...点阵列(BitArray) 它代表了一个使用值 1 和 0 来表示的二进制 数组。 当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。

    38710

    数据结构(9)-- 哈希表 unordered_map

    哈希表hashtable(key,value) 就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里...而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。 具体参考一下你的手机通讯录。...那还有没有更好一点的办法呢?...那么,有没有办法在得到O(1)的查找效率的同时、又不付出太大的空间代价呢? 有,就是本篇讲的哈希表了。 很简单,我们把你的车牌号看作一个8位36进制的数字;为了方便,我们可以把它转换成十进制。...我们前面提到过,当遇到这种冲突/碰撞时,为了避免彼此覆盖,这些数据就要存在链表中(或者再散列后存在同一个哈希表中)。

    1.1K11

    哈希表的原理及实现代码

    然后,有数据存进来的时候,按照特定规则得出这个数据在数组中的位置,将数据存进这个位置 我们就以存进一个整型数据为例,特定规则就是取余 ?...我们已经把数据插入到了哈希表中,现在,我们要查找一个数据,只要按照取余规则计算出这个数据在数组中对应的位置,然后查看数组的这个位置,就可以取出这个数据了,比如我们要从哈希表中取出52,根据取余规则,52...的计算出来的位置是8,数组中8这个位置是空的,52不在哈希表中,找不到52的数据;从哈希表中取出77,77计算出来的位置是0,数组中0这个位置有值,而且值就是77,从哈希表中取出77的值。...如果哈希表满了,该怎么扩容 第一个问题就是如何解决这种冲突 有开放定址法,链定址法,我们说一下开放定址法,就是将这个冲突的数据再重新计算一个空的位置,将其存进去,比如我们要存放88,哈希值是0,数组这个位置已经有值了...第二个问题,哈希表扩容 一个简单的解决办法是,当插入数据时,发现所有的位置都满了,我们就再分配一个大于原先空间的一片空间,把原来空间中的值重新哈希到新的空间中。 4.

    56420

    数据结构之哈希表

    而对于大整型,例如身份证号、手机号等,这种无法直接对应索引的就需要进行取模了,一个简单的解决办法就是模一个素数。至于为什么是素数,这是一个数学上的问题,超出了本文的讨论范围,有兴趣的可以自行了解一下。...,以及在Java中如何取得一个对象的哈希值、如何比较两个对象是否相等。...我们来看这个图,在哈希表中,每个“桶(bucket)”或者“槽(slot)”会对应一条链表,所有哈希值相同的元素我们都放到相同槽位对应的链表中: ?...为了解决这个问题,我们就要像实现动态数组那样,对哈希表实现动态扩容。扩容到合适的大小后可以减少哈希冲突的概率,将哈希表维持在一个较好的性能水平,这也是设计哈希表时非常关键的一个要素。...不知道你有没有发现,在本文中我们实现的哈希表实际上有一个小 bug,为了简化流程只专注于哈希表本身的实现,我们是直接使用 TreeMap 来存储数据,而 TreeMap 底层是红黑树,要求 key 是具有可比较性的

    69930

    从头到尾解析Hash 表算法

    哈希表hashtable(key,value) 的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value...而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位(文章第二、三部分,会针对Hash表详细阐述...算法三:堆 在算法二中,我们已经将时间复杂度由NlogN优化到NK,不得不说这是一个比较大的改进了,可是有没有更好的办法呢?...,这个数组的容量根据程序的要求来定义,例如1024,每一个Hash值通过取模运算 (mod) 对应到数组中的一个位置,这样,只要比较这个字符串的哈希值对应的位置有没有被占用,就可以得到最后的结果了,想想这是什么速度...然而Blizzard的程序员使用的方法则是更精妙的方法。基本原理就是:他们在哈希表中不是用一个哈希值而是用三个哈希值来校验字符串。 MPQ使用文件名哈希表来跟踪内部的所有文件。

    1K40

    在cuda中使用哈希表

    关于在cuda中使用哈希表的一些经验总结 cuda中哈希方法 目前已知的在cuda中使用哈希的方法: 数组 适用于较小的数据规模,如键的范围是int,或者能转化为整型,值类型最长为long等 cudpp...可接受的键值范围均为32bit,相比数组好处是占用内存小,不用存储无用数据 其内部使用布谷鸟过滤,核心思想是多个hash算法生成多个映射值,如果有一个位置是空的,就将元素放入,否则踢走其中一个,被踢走的再去踢别人...数组, 分别存放keys和values 也可以从一个std::unordered_map获取数据 将keys和values从host拷贝到device 创建CUDPPHandle 插入数据 使用哈希表查询数据...compute_60;compute_70即可解决问题 详见cudpp_issues_187 扩展cudpp哈希表 修改CUDPP库中哈希功能支持更长的键类型....只能用哈希,因此将键类型从32bit扩展到48bit,可以支持5^20的键,剩下16bit存储值,依然编码到64bit的long long类型,达到最小改动满足需求的目的.

    1.1K20

    全网把Map中的hash()分析的最透彻的文章,别无二家。

    数字分析法:提取关键字中取值比较均匀的数字作为哈希地址。 除留余数法:用关键字k除以某个不大于哈希表长度m的数p,将所得余数作为哈希表地址。...再哈希法 当哈希地址发生冲突用其他的函数计算另一个哈希函数地址,直到冲突不再产生为止。 建立公共溢出区 将哈希表分为基本表和溢出表两部分,发生冲突的元素都放入溢出表中。...上面我们提到过,常用的哈希函数的冲突解决办法中有一种方法叫做链地址法,其实就是将数组和链表组合在一起,发挥了两者的优势,我们可以将其理解为链表的数组。 ?...但是考虑到效率等问题,HashMap的实现会稍微复杂一点。 hash :该方法主要是将Object转换成一个整型。 indexFor :该方法主要是将hash生成的整型转换成链表数组中的下标。...生成的整型转换成链表数组中的下标。

    62850

    全网把 Map 中的 hash() 分析的最透彻的文章,别无二家

    数字分析法:提取关键字中取值比较均匀的数字作为哈希地址。 除留余数法:用关键字k除以某个不大于哈希表长度m的数p,将所得余数作为哈希表地址。...再哈希法 当哈希地址发生冲突用其他的函数计算另一个哈希函数地址,直到冲突不再产生为止。 建立公共溢出区 将哈希表分为基本表和溢出表两部分,发生冲突的元素都放入溢出表中。...上面我们提到过,常用的哈希函数的冲突解决办法中有一种方法叫做链地址法,其实就是将数组和链表组合在一起,发挥了两者的优势,我们可以将其理解为链表的数组。 ?...但是考虑到效率等问题,HashMap的实现会稍微复杂一点。 hash :该方法主要是将Object转换成一个整型。 indexFor :该方法主要是将hash生成的整型转换成链表数组中的下标。...生成的整型转换成链表数组中的下标。

    87510

    哈希表哪家强?几大编程语言吵起来了!

    今天的大会就围绕哈希表分为几个议题讨论,首先是第一个议题:存储结构与冲突解决” 存储结构与冲突解决 来自GoLang帝国的map率先发言:“哈希表,哈希表,首先得是个表嘛,所以最基本的要用一个数组来存储...,数组中的每一个元素叫做bucket。...,不就是用hash值对哈希表数组长度进行一个求模运算吗?”...再进行与运算,相当于取了哈希值的低位,直接映射到对应的数组位置,与运算比取模运算要快不少。不瞒诸位,我HashMap中也是使用的这种方式,此乃雕虫小技,不值得炫耀” ?...C#的HashTable问道:“这样直接取低几位,会不会造成Hash值到数组到映射不均匀,拿你举的例子来说,18的二进制是0001 0010,34的二进制是0010 0010,他们的低4位都一样,和1111

    76420

    【愚公系列】2021年11月 C#版 数据结构与算法解析(哈希)

    通过一定的哈希算法(典型的有MD5,SHA-1等),将一段较长的数据映射为较短小的数据,这段小数据就是大数据的哈希值。...唯一标识 现在有十万个文件, 给你一个文件, 要你在这十万个文件中查找是否存在. 一个很笨的办法就是把每一文件都拿出来, 然后按照二进制串一一进行对比. 但是这个操作注定是比较费时的。...可以用哈希算法对文件进行计算, 然后比较哈希值是否相同。 因为存在哈希冲突的情况, 你可以在相同哈希值的文件再进行二进制串比较. 3. 数字签名 Hash算法也是现代密码体系中的一个重要组成部分。...而且这样的协议还有其他的优点。 4. 哈希表 在哈希表中使用哈希函数已经并不陌生了, 不再赘述。 5. 负载均衡 比如说, 现在又多台服务器, 来了一个请求, 如何确定这个请求应该路由到哪个路由器呢?...当然, 必须确保相同的请求经过路由到达同一个服务器. 一种办法就是保存一张路由关系的表, 比如客户端IP和服务器编号的映射, 但是如果客户端很多, 势必查找的时间会很长。

    69740

    深入浅出Redis(一):对象与数据结构

    Redis中的数据以Key,Value键值对的形式存储在字典中,字典的实现是哈希表键Key只能使用字符串对象来表示,值Value能够使用其他所有对象对象与数据结构Redis中存在丰富的对象,常用的对象(...,插入链表头部 图片为了防止大字典扩容时发生阻塞,字典中哈希表的扩容是循序渐进的,在发生扩容时会有俩个哈希表 图片旧哈希表和新哈希表中都可能存储数据,再收到hget等请求时先在旧哈希表中查找,找到了就顺便把它迁移到新哈希表中...;在旧哈希表中没找到就去新哈希表中找在完成迁移时,新哈希表将旧哈希表替换skiplist跳表跳表维护多层级的有序链表,利用高层能够快速达到后续节点,实现简单,维护方便,增删改查时间复杂度平均log n...,如16、32、64位的整型) 图片当加入的元素为当前数组内不存在的高位整型时(比如数组中都是32位整型,此时加入一个64位整型)发生升级:先申请内存重分配,再将旧元素移动到对应位置上,然后加入新元素同时修改编码...(比如一个大礼包下有A商品B商品等)集合对象集合对象set的特点是无序、无重,由intset或hashtable来实现数据量少且数据为整型使用intset、数据量大或数据不为整型使用hashtable且值永远为

    43031

    2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】

    概述c#中代理和事件? 49. 哈希表与字典对比 50. C#中四种访问修饰符是哪些?各有什么区别? 51. 下列代码在运行中会发生什么问题?如何避免? 52. 什么是装箱拆箱,怎样减少操作 53....(表示可按照索引进行访问的非泛型集合对象),Object数组实现 List列表:底层实现是泛型数组,特性,动态扩容,泛型安全 将泛型数据(对值类型来说就是数据本身,对引用类型来说就是引用)存储在一个泛型数组中...数组:声明 C# 数组和声明 C++ 数组的语法不同。在 C# 中,“[]”标记出现在数组类型的后面。...哈希表与字典对比 字典:内部用了Hashtable作为存储结构 如果我们试图找到一个不存在的键,它将返回 / 抛出异常。 它比哈希表更快,因为没有装箱和拆箱,尤其是值类型。...哈希表中的所有成员都是线程安全的, 哈希表不是通用类型, Hashtable 是松散类型的数据结构,我们可以添加任何类型的键和值。

    23.9K1731

    深入浅出Redis(一):对象与数据结构

    Redis中的数据以Key,Value键值对的形式存储在字典中,字典的实现是哈希表键Key只能使用字符串对象来表示,值Value能够使用其他所有对象对象与数据结构Redis中存在丰富的对象,常用的对象(...,插入链表头部image.png为了防止大字典扩容时发生阻塞,字典中哈希表的扩容是循序渐进的,在发生扩容时会有俩个哈希表image.png旧哈希表和新哈希表中都可能存储数据,再收到hget等请求时先在旧哈希表中查找...,找到了就顺便把它迁移到新哈希表中;在旧哈希表中没找到就去新哈希表中找在完成迁移时,新哈希表将旧哈希表替换skiplist跳表跳表维护多层级的有序链表,利用高层能够快速达到后续节点,实现简单,维护方便,...,无重复的数组在实现上使用数组、长度(记录元素数量)和编码(编码能够标识元素类型,如16、32、64位的整型)image.png当加入的元素为当前数组内不存在的高位整型时(比如数组中都是32位整型,此时加入一个...并集(可能认识)当数据量小且元素都为整型时使用整型集合intset实现,当数据量大使用哈希表实现整型集合有不同的编码形式,充分节省了空间;使用哈希表时Value为空有序集合对象有有序、无重的特点,常用来做排行榜

    13010

    C#哈希查找算法

    在计算机科学中,数据结构和算法是构建高效软件的基石。在众多数据结构中,哈希表以其快速的数据检索能力而闻名。本文将深入探讨C#中的哈希查找算法,包括其原理、实现以及在实际应用中的优势和局限性。...这种技术的核心在于哈希函数的设计,它能够将任意长度的输入(键)通过某种算法转换为固定长度的输出(哈希值),这个输出值即为数据在哈希表中的索引。...哈希表的实现 在C#中,哈希表的实现可以通过Dictionary类来完成。这个类内部使用了一个数组来存储键值对,并通过哈希函数来确定键值对在数组中的位置。...基本操作 插入(Add):将键值对添加到哈希表中。如果键已经存在,则更新其对应的值。 查找(Search):通过键来查找对应的值。如果键存在,则返回其值;如果不存在,则返回null或指定的默认值。...C#中的Dictionary类采用了链地址法来解决碰撞问题。每个数组位置都维护了一个链表,当发生碰撞时,新的元素会被添加到链表的头部。

    2.3K00

    .NET面试题系列 - IEnumerable的派生类

    由于实现方式的特殊性,每个哈希表上的元素仅有一个可能出现的位置,就是其哈希函数的值加上冲突之后的调整偏移量,无法移动哈希表上的元素。 哈希表是一种键值对类型的数据结构。...它的特点是查找速度飞快,可以达到O(1)的水平。假设你查询的键为x,你可以通过计算一个函数f(x),获得其值,然后到表中的对应位置获得查询结果。...在哈希表上具有关键字k的元素则被分配到表上的槽f(k)中,其中f是哈希函数。注意,函数的值和输入变量不一定是一一对应的,例如模函数,19和99模10都是9。...线性探测填装一个哈希表的过程: 关键字为{89,18,49,58,69}插入到一个哈希表中的情况。假定取关键字除以10的余数为哈希函数。...若想要动态扩充容量,那么动态数组可以满足这点需求。ArrayList是C#最不常用(我想不出任何用它的理由)也是最基础的一个动态数组。

    82920

    从 hashtable 到 bloomfilter

    第一种就是除法哈希法,简单来说就是将 key 想办法处理成一个数字,比方说对 key 每个字符相加,得到的数字对哈希表大小取模。这种思想在 redis 分布式应用和一些大数据应用场景都有看见。...最后一种跟二度哈希有点类似,叫做全域哈希,就是在众多哈希函数中随机取一个进行哈希,得到结果进行存储,其好处就是当存储数据量太大,而哈希表又无法扩容,防止哈希表编程一个数组指针类型,但是这种无法判断 key...布隆过滤器就是告诉你,这个网站我爬过,那个我没有爬过的的东西。注意他是没有办法存储 key 的 value 的,他只能告诉你有没有 key 这个值。原理布隆过滤器原理很简单,首先就是需要一个位数组。...位数组,顾名思义,每一个位就是一个数组元素,这也是布隆过滤器开销比哈希表笑的原因。...假如最开始的时候,这个位数组所有位数都是 0 ,那么我们设计 k 个哈希函数,根据 k 个哈希函数处理 key 得到 k 个值,我们将这个 k 个值位都设置为 1 。

    12710

    【算法与数据结构】--高级算法和数据结构--哈希表和集合

    一、哈希表的原理 哈希表(Hash Table)是一种常用的数据结构,其核心原理是将数据存储在数组中,并使用哈希函数来映射数据的键(Key)到数组中的特定位置,这个位置通常被称为“哈希桶”或“槽位”。...哈希桶(Hash Bucket):哈希表通常包括一个固定数量的桶或槽位(通常是数组),每个槽位可以存储一个或多个键-值对。哈希函数将键映射到特定的槽位。...在链地址法中,每个槽位保存一个链表或其他数据结构,所有哈希到相同位置的键-值对都存储在该链表中。在开放地址法中,如果一个槽位已经被占用,哈希表会继续查找下一个可用的槽位。...以下是一些常见的Java集合类型的示例: ArrayList(数组列表):与C#中的List类似,它是一个可变大小的数组,用于存储元素。...):与C#中的Dictionary类似,它是一个键值对存储,用于将值与唯一键相关联。

    47430

    【小Y学算法】⚡️每日LeetCode打卡⚡️——1.两数之和

    C#方法一:暴力法 看了题目,很自然的就会想到,只要进行两层循环,对所有的数字进行一次相加,当和为target时,将两个值的index返回即可 //方法一: public int[] TwoSum...C#方法二:哈希 解法:采用哈希表,节省遍历时间 详细:通过键值对保存数组值与索引的关系,在之后的寻值(找target-nums[i])时可以一步寻到,省去再次遍历数组的时间。...Java方法二:哈希表 思路及算法 注意到方法一的时间复杂度较高的原因是寻找 target - x 的时间复杂度过高。因此,我们需要一种更优秀的方法,能够快速寻找数组中是否存在目标元素。...这样我们创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。...对于每一个元素 x,我们可以 O(1)O(1) 地寻找 target - x。 空间复杂度:O(N)O(N),其中 NN 是数组中的元素数量。主要为哈希表的开销。 ---- ????

    29630
    领券