类和结构的区别 类: 类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存 类有构造和析构函数 类可以继承和被继承 结构: 结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象. 结构没有构造函数,但可以添加.结构没有析构函数 结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口 //哈希表 //不规定长度 不规定类型 不规定建类型 //Hashtable j = new Hashtable(); //…
HashSet集合存储数据的结构(哈希表) 在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低.而JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超迂阈值(8 )时,将链表转换为红黑树,这样大大减少了查找时间. 简单的来说,哈希表是由数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下图所示. Set集合存储元素不重复的原…
1. 具体题目: 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1.现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1: 输入: [1,3,2,2,5,2,3,7] 输出: 5 原因: 最长的和谐数组是:[3,2,2,2,3] 说明: 输入的数组长度最大不超过20,000. 2. 思路分析: 由于题目不要求子序列中元素在原数组中是连续的,只要求该子序列中元素最多即可.所以考虑在遍历数组时记录各元素的个数,将其记录在一个哈希表中(key-num,…
比起之前那些问计数哈希表的题目,这道题好像更接近哈希表的底层机制. java中hashmap的实现是通过List<Node>,即链表的list,如果链表过长则换为红黑树,如果容量不足(装填因子下)则扩充数组容量.解决冲突的方式是直接接在对应位置的链表上. 首先看看哈希表几个操作的时间复杂度: HashMap的新增: 计算key的哈希值 哈希值作为index,找到对应的数组位置 如果数组位置为空,直接存入 如果数组位置不为空,遍历该链表,插入末尾 这里考虑理想情况(无冲突),时间复杂度为O1 H…
1. Two Sum https://leetcode.com/problems/two-sum/description/ 不使用额外空间需要n*n的复杂度 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { ;i<nums.size()-;i++){ ;j<nums.size();j++){ if(nums[i] + nums[j] == target){ v…
149. Max Points on a Line unordered_map<float, int> hash 记录的是斜率对应的点数 unordered_map<float, int>::iterator it = hash.begin(); it != hash.end(); it++ 斜率k = (y2 - y1) / (x2 - x1) 最后记得加上duplicate的点数…
1. 具体题目 给定一个未排序的整数数组,找出最长连续序列的长度.要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 2. 思路分析 由于题目中不要求连续序列中的元素在原数组中是有序的,对于一个数只要查找数组中是否有与其相邻的数即可,所以考虑将元素存入HashSet中,实现 O(1)时间的查询. 3. 代码 public int longestConsecutive(in…
HashSet集合存储数据的结构(哈希表) Set集合存储㢝不重复的原理 前提:存储的元素必须重写hashCode方法和equals方法…
本文总结在LeetCode上有关哈希表的算法题,推荐刷题总数为12题.具体考察的知识点如下图: 1.数学问题 题号:149. 直线上最多的点数,难度困难 题号:554. 砖墙,难度中等(最大最小边界问题) 题号:939. 最小面积矩形,难度中等 题号:1001. 网格照明,难度困难 2.字符串和数组类问题 题号:726. 原子的数量,难度困难 题号:930. 和相同的二元子数组,难度中等 题号:992. K 个不同整数的子数组,难度困难 题号:1072. 按列翻转得到最大值等行数,难度中等 题号…
题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素在答案里不能重复出现. 你可以按任意顺序返回答案. 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] . 示例 2: 输入:nums = [3,2,4], target…