Leetcode刷题 day02 哈希表
哈希表(Hash Table,也叫散列表),是根据键(key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度,这个映射函数称作哈希函数,存放记录的数组称作哈希表。
哈希表使用O(1)时间进行数据的插入删除和查找,但是哈希表不保证表中数据的有序性,这样哈希表中查找最大数据或者最小数据的时间是O(N)实现。
一,变位词组。题目链接:https://leetcode-cn.com/problems/group-anagrams-lcci/
对String类型的字符串进行排序:先将String类型的字符串转换为char类型的字符数组,再调用Arrays.sort()对数组进行排序,最后再转换为String类型的字符串。
String str = "adfgbcs"; char[] chars = str.toCharArray(); Arrays.sort(chars); String key = new String(chars);
题解:
class Solution { public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> res = new LinkedList<>(); Map<String,Integer> map = new HashMap<>(); int index = 0; for(String str:strs){ char[] chars = str.toCharArray(); Arrays.sort(chars); String str1 = new String(chars); if(!map.containsKey(str1)){ map.put(str1,index++); List<String> temp = new LinkedList(); temp.add(str); res.add(temp); }else{ res.get(map.get(str1)).add(str); } } return res; } }
二,最佳直线。题目链接:https://leetcode-cn.com/problems/best-line-lcci/。
这是一道数学题。。。。。。。。
二维数组:数组中的元素是数组。
二维数组的定义:以int类型举例 int[][] scores;//定义一个int类型的二维数组
二维数组的初始化:1.静态初始化(直接后面大括号赋值) scores = new int[][]{ {1,2,3}, {2,3}}; 2.动态初始化:int[][] i =new int[3][4];//动态初始化方式1 int[][] i =new int[3][];//动态初始化方式二
直线的一般式方程:直线的一般式方程:Ax + By + C = 0 ;
直线的一般式方程适用于所有的二维空间直线。而其他直线方程,如点斜式,两点式,要么不能支持所有情况下的直线(比如跟坐标轴垂直或者平行),要么不能支持所有情况下的点(比如x坐标相等,或者y坐标相等)。所以一般式方程在用计算机处理二维图形数据时特别有用。
注意:1)要唯一确定一条直线,只需要知道A,B,C三个数即可。不过要对A,B,C求最大公约数。 2)对于任意两点(X1,Y1),(X2,Y2)都有A = Y2 - Y1 B = X1 - X2 C = X2Y1-X1Y2
其他知识点:最大公约数(Greatest Common Divisor)指两个或多个整数共有约数中最大的一个。也称最大公因数,最大公因子。最大公约数的求法采用辗转相除法。
int fun(int m,int n){ if(n==0) return m; return fun(n,m%n); }
位运算(&)效率要比代替取模运算(%)高很多,主要原因是位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。
那么,为什么可以使用位运算(&)来实现取模运算(%)呢?这实现的原理如下:
X % 2^n = X & (2^n – 1)
2^n表示2的n次方,也就是说,一个数对2^n取模 == 一个数和(2^n – 1)做按位与运算 。
假设n为3,则2^3 = 8,表示成2进制就是1000。2^3 = 7 ,即0111。
此时X & (2^3 – 1) 就相当于取X的2进制的最后三位数。
从2进制角度来看,X / 8相当于 X >> 3,即把X右移3位,此时得到了X / 8的商,而被移掉的部分(后三位),则是X % 8,也就是余数。https://blog.csdn.net/xu_dongdong/article/details/80251936
今天,只做了两道题,两道题都没有搞好。