算法小技巧
警告
本文最后更新于 2023-10-31,文中内容可能已过时。
算法小技巧
-
for 循环里套 for 循环时间复杂度会爆表,呈指数式增长,宁愿预处理也不要这样。
-
其中,在获取整个数组的最大的三个数的过程中,我想到一种非常简便的数据结构:保持顺序和长度,添加到其中的数会自动保持顺序,同时把多余的数据挤出。核心在于,添加的时候,先从最末尾的数据进行对比,能加入就替换,不能加入就算了,然后比较最后一项和倒数第二项,如果满足顺序就保持,不满足就交换,直到数组的最前端,这个数据结构的好处是长度固定,保持顺序,但是添加的时候很麻烦,时间复杂度是 O(n)。所以这个数据结构不适用于太多的元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
//max1 > max2 > max3 int max1 = Integer.MIN_VALUE,max2 = Integer.MIN_VALUE,max3 = Integer.MIN_VALUE; for (int i = 0; i < nums.length; i++) { int ele = nums[i]; if (ele > max3) { max3 = ele; } if (max3 > max2) { int buffer = max2; max2 = max3; max3 = buffer; } if (max2 > max1) { int buffer = max1; max1 = max2; max2 = buffer; } }
-
HashMap 的 get 方法的算法复杂度为 O(1),当然这是理想情况,但是这也说明了,hashMap 在查找的时候的算法复杂度是 O(1)。这是链表的数据结构的优势