代码随想录算法训练营第五天|242(有效的字母异位词),349(两个数组的交集),202(快乐数),1(两数之和)

哈希

C#常用的数据结构:
[]Array,ArrayList 数组和动态数组
List 集合
HashSet 哈希集合(无重复值)
HashTable 哈希表(obj,obj的键值对)
Dictionary<T,T> 泛型的哈希表

什么时候考虑Hash数据结构?

  • 需要高效的判断一个值是否存在在一个容器中时。
  • 容器不允许重复值(HashSet或哈希表的键值)

242有效的字母异位词,因为小写字母之间相对范围最大为26,可以将字符串转化成已知有26个索引或者键值的哈希表,因为索引为int且长度固定,所以可以直接用数组表示。之后则是遍历两个字符串对对应键值的value进行加减,若俩字符串为字母异位词,则所有值都应该为0.

349两个数组的交集,将两个数组变成无重复值的HashSet,在C#中有一个IntersetWith的函数可以直接求得交集,最后ToArray转换成数组就行了。

202快乐数,一个数不是快乐数的现象为,在变换的时候会产生循环,也就是有重复值。将每次得到的值存在哈希表或集合中,存入前判断一下是否存在,若存在就不是快乐数。

1两数之和,因为最后要求返回俩值得下标,所以需要键值对形式。将数组变成字典,键值为数组值,字典值为数组值的下标,这样就可以用来判断当前数组值得下标和当前循环下标是否相等,根据题目必须得不相等。

实习好累。

posted @ 2024-05-27 20:48  sakilohale  阅读(141)  评论(0编辑  收藏  举报