38,25,74,63,52,48),函数h (key)=key%7计算散列地址,并散列存储在散列表A[0…6】中,线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为:2
74本应该在a[4],但25已经占了,74只能去a[5],会被查找2次才能找到其;52本应该在a[3],但只能去a[6],会被查找4次才能找到其,总次数=12,6个数据,12/6=2
哈希表组织100万条记录。以支持字段A快速查找,则:
不可以在常数时间内找到特定记录,有哈希冲突;拉链式哈希曼最坏查找时间复杂度是O (n),100万条都冲突了;哈希函数的选择跟A有关,A若是字符串则用不了出溜余数法,
哈希基础知识
微信红包
class Gift {
public: int getValue(vector<int> gifts, int n) {
sort(gifts.begin(), gifts.end());
//超过一半的数排序之后必然排在中间
int middle = gifts[n / 2];
int count = 0;
for(int i = 0; i < n; i++)
{ //统计排在中间的数的个数
if(gifts[i] == middle)
{ count++; }
}//如果个数大于一半,则存在超过一半的数
if(count > n / 2)
return middle;
else return 0;
}
};/*思路二:map统计*/
class Gift
{
public: int getValue(vector<int> gifts, int n)
{ map<int, int> count;
int middle = gifts.size() / 2;
for (const auto& e : gifts)
{ ++count[e]; }
for (const auto& e : count)
{ if (e.second >= middle)
return e.first; }//first:val数值;second:次数
return 0;
}
};
242. 有效的字母异位词
349两个数组的交集
题目
解析
增强型for循环 for(类型 变量:数组)
int类型的变量num,每循环一次,就从nums2数组中取出,然后在foreach语句的{}使用num变量。
实现功能:[1,1,2,3,3]->[1,2,3],即去除重复元素:
unordered_set<int> nums_set(nums1.begin(), nums1.end())
202
题目
解
无限循环=sum重复出现=可能死循环=到不了1=false