哈希算法:竞猜逻辑哈希游戏开发的应用

2022-06-16 14:19:06 浏览数 (1)

简单来说,哈希函数就是快速的将1个数值转换为1个哈希值,哈希值是整数,并且要保证,相同的输入得到的哈希值是一样的,如果两个不同的输入得到了相同的结果,这就是哈希值冲突。我们应该通过精心的设计去减少冲突,但是不能完全避免,如何处理冲突是一个重点,后面会详细说到。

  也就是说,输入键(key),然后经过哈希函数计算,最后得到哈希值,而哈希值是整数,通过哈希值当做数组下标,得到对应的值。

  输入key,经过哈希函数计算fun(key),最后得到y。要把y取余,y%arr.Length,免得超出数组最大长度,最后把y当做数组下标去访问数组里对应的值,这就是整个过程了。

  按照这种思想,采用哈希技术将值存储在一块连续的存储空间中,这块连续的存储空间称为哈希表或者散列表。关键字对应的存储位置称为哈希地址或者散列地址。

  区块链哈希是什么?如果是刚开始了解区块链,就需要结合“区块”的概念来一起理解了。每一个区块,包含的内容有数据信息,本区块的哈希值以及上一个区块的哈希值。区块中的数据信息,主要是交易双方的地址与此次交易数量还有交易时间信息等。而哈希值就是寻找到区块,继而了解到这些区块信息的钥匙。

  代码如下:

  class Solution{

  public:

  vector<vector<int>>threeSum(vector<int>&nums){

  vector<vector<int>>result;

  sort(nums.begin(),nums.end());

  //找出a b c=0

  //a=nums<i>,b=nums[left],c=nums[right]

  for(int i=0;i<nums.size();i ){

 

 //排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了

  if(nums<i>>0){

  return result;

  }

  //错误去重方法,将会漏掉-1,-1,2这种情况

  /*

  if(nums<i>==nums[i 1]){

  continue;

  }

  */

  //正确去重方法

  if(i>0&&nums<i>==nums[i-1]){

  continue;

  }

  int left=i 1;

  int right=nums.size()-1;

  while(right>left){

  //去重复逻辑如果放在这里,0,0,0的情况,可能直接导致right<=left了,从而漏掉了0,0,0这种三元组

  /*

  while(right>left&&nums[right]==nums[right-1])right--;

  while(right>left&&nums[left]==nums[left 1])left ;

  */

  if(nums<i> nums[left] nums[right]>0){

  right--;

  }else if(nums<i> nums[left] nums[right]<0){

  left ;

  }else{

  result.push_back(vector<int>{nums<i>,nums[left],nums[right]});

  //去重逻辑应该放在找到一个三元组之后

  while(right>left&&nums[right]==nums[right-1])right--;

  while(right>left&&nums[left]==nums[left 1])left ;

  //找到答案时,双指针同时收缩

  right--;

  left ;

  }

  }

  }

  return result;

  }

  };

0 人点赞