算法|一周刷爆LeetCode,关于数据结构与算法,看这篇刷题笔记就够了( 三 )


解法一:哈希表
解法二:双指针

排列硬币总共有 n 枚硬币 , 将它们摆成一个阶梯形状 , 第 k 行就必须正好有 k 枚硬币 。
给定一个数字 n , 找出可形成完整阶梯行的总行数 。
n 是一个非负整数 , 并且在32位有符号整型的范围内
解法一:迭代从第一行开始排列 , 排完一列、计算剩余硬币数 , 排第二列 , 直至剩余硬币数小于或等于行数

解法二:二分查找假设能排 n 行 , 计算 n 行需要多少硬币数 , 如果大于 n , 则排 n/2行 , 再计算硬币数和 n 的大小关系


解法三:牛顿迭代使用牛顿迭代求平方根 , (x + n/x)/2
假设能排 x 行 则 1 + 2 + 3 + ...+ x = n , 即 x(x+1)/2 = n 推导出 x = 2n - x

合并两个有序数组两个有序整数数组 nums1 和 nums2 , 将 nums2 合并到 nums1 中 , 使 nums1 成为一个有序数组 。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 假设 nums1 的空间大小等于 m + n , 这样它就有足够的空间保存来自 nums2 的元素 。
解法一:合并后排序
时间复杂度 : O((n+m)log(n+m)) 。
空间复杂度 : O(1) 。
解法二:双指针 从前往后将两个数组按顺序进行比较 , 放入新的数组

时间复杂度 : O(n + m) 。
空间复杂度 : O(m) 。
解法三:双指针优化从后往前

时间复杂度 : O(n + m) 。
空间复杂度 : O(1) 。
子数组最大平均数给一个整数数组 , 找出平均数最大且长度为 k 的下标连续的子数组 , 并输出该最大平均数 。
滑动窗口:

窗口移动时 , 窗口内的和等于sum加上新加进来的值 , 减去出去的值

完整刷题笔记帮大家整理好了 , 需要的同学转发本文+关注+私信【0406】即可获取