当前位置: 首页 > 编程笔记 >

使用哈希映射的锁定和钥匙问题

田慈
2023-03-14
本文向大家介绍使用哈希映射的锁定和钥匙问题,包括了使用哈希映射的锁定和钥匙问题的使用技巧和注意事项,需要的朋友参考一下

给出了不同锁的列表和其他键的列表。我们的任务是从给定的列表中找到锁和钥匙的正确匹配,并在正确时为该钥匙分配锁。

在这种方法中,我们将遍历所有锁并创建一个哈希表,然后在哈希表中搜索每个键。如果钥匙匹配,则将其标记为有效钥匙并分配一个锁。

输入输出

Input:
The lists of locks and keys.
lock = { ),@,*,^,(,%, !,$,&,#}
key = { !, (, #, %, ), ^, &, *, $, @ }
Output:
匹配锁和钥匙后:
Locks: ! ( # % ) ^ & * $ @
Keys: ! ( # % ) ^ & * $ @

算法

lockAndKeyProblem(lock, key, n)

输入:锁列表,键列表,n。

输出:查找哪个钥匙用于哪个锁。

Begin
   define hashmap
   for i in range (0 to n-1), do
      hashmap[lock[i]] := i  //set hashmap for locks
   done

   for i in range (0 to n-1), do
      if key[i] is found in the hashmap, then
         lock[i] = key[i]
   done
End

示例

#include<iostream>
#include<map>
using namespace std;

void show(char array[], int n) {
   for(int i = 0; i<n; i++)
      cout << array[i] << " ";
}

void lockAndKeyProblem(char lock[], char key[], int n) {
   map<char, int> hashMap;
   for(int i = 0; i<n; i++)
      hashMap[lock[i]] = i;           //hash map for locks

   for(int i = 0; i<n; i++) //for each keys for each lock
      if(hashMap.find(key[i]) != hashMap.end()) {
         lock[i] = key[i];
      }
}

int main() {
   char lock[] = {')','@','*','^','(','%','!','$','&','#'};
   char key[] = {'!','(','#','%',')','^','&','*','$','@'};
   int n = 10;
   lockAndKeyProblem(lock, key, n);
   cout << "匹配锁和钥匙后:"<<endl;
   cout << "Locks: "; show(lock, n); cout << endl;
   cout << "Keys: "; show(key, n); cout << endl;
}

输出结果

匹配锁和钥匙后:
Locks: ! ( # % ) ^ & * $ @
Keys: ! ( # % ) ^ & * $ @
 类似资料:
  • 我想在更新时锁定一个特定的密钥。尝试了下面的示例代码。 上面的代码正在获取锁,但我仍然可以从redis-cli或其他应用程序访问密钥。 我怎么才能锁上钥匙?

  • 本文向大家介绍Java中并发哈希映射和同步哈希映射之间的区别,包括了Java中并发哈希映射和同步哈希映射之间的区别的使用技巧和注意事项,需要的朋友参考一下 并发Hashmap是jdk1.5中引入的类。并发哈希映射仅在添加或更新映射时在称为片段的存储桶级别应用锁。因此,并发哈希映射允许对映射进行并发读写操作。  同步hashmap(Collection.syncronizedHashMap())是C

  • 我有4节课。其中一个保存有关客户的信息。另一个是关于订单的。另外两个类扮演注册表角色,一个是客户注册表,另一个是订单注册表。 Orders registry有一个哈希映射,如下所示: 客户注册也是如此。 类orders具有int orderid。类客户具有int customerid。我通过两个注册中心添加了演示数据(假设一个客户的客户ID为100,一个订单的订单ID为500)。 我编写了一些简单

  • 我正试图让我的头脑围绕着一个哈姆特的细节。我会用Java自己实现一个,只是为了理解。我熟悉尝试,我想我得到了HAMT的主要概念。 基本上, 两种类型的节点: null null 我不太明白的部分是碰撞检测和缓解。在链接的论文中,他暗示了这一点: 然后将现有键插入到新的子哈希表中,并添加新键。每使用5个以上的散列比特,冲突的概率就减少1/32倍。偶尔,可能会消耗整个32位哈希,必须计算一个新的哈希来

  • > 阅读算法书,需要掌握哈希表的概念。他们写了关于使用单独链接的散列和使用线性探测的散列。我猜Java的HashMap是一个哈希表,因此我想知道HashMaps使用什么机制(链接或探测)? 我需要实现最简单的HashMap与get,put,删除。你能给我指出好的材料来阅读吗? 当用于映射的惟一键是自定义对象时,我们需要在相应的类型中实现hashCode()函数。我做得对吗?或者什么时候需要hash

  • 我有一个包含许多重复条目的文件,如下所示: 那里的每个实体也与一个ID相关联,也许是一个,也许是更多, 我想单独获取每个实体,但由于消除歧义,对于类似于,每个实体都可以与多个ID关联,因此在下,可能会有一个用于河流的ID,另一个用于海湾、城镇等。 我想最好的方法是使用哈希映射,其中名称是关键,对吗? 有没有办法输出JSON格式的hashmap或其他高度可移动的数据表示?