
获得徽章 8
- #刷题交流#
打卡,16、《最大矩形面积》解题思路:
初始化:
创建一个空栈 stack,用于存储数组索引。
初始化 max_area 为 0,用于存储最大矩形面积。
初始化 index 为 0,用于遍历数组。
遍历数组:
当 index 小于数组长度 n 时,执行以下操作:
如果栈为空,或者当前元素的高度大于或等于栈顶元素的高度,将当前索引 index 压入栈中,并将 index 增加 1。
否则,弹出栈顶元素 top_of_stack,计算以 top_of_stack 为最小高度的矩形面积,并更新 max_area。
处理栈中剩余元素:
遍历结束后,栈中可能还剩余一些元素。依次弹出栈顶元素,计算以该元素为最小高度的矩形面积,并更新 max_area。展开评论点赞 - #刷题交流#
查找最长无重复子串的问题的解题思路:
1、使用两个指针,一个表示当前子串的开始(左指针),一个表示当前子串的结束(右指针)。
2、使用一个集合来存储当前子串中的字符。
3、每次右指针向右移动,检查当前字符是否在集合中:
4、如果在,就移动左指针,直到移除重复字符。
5、如果不在,就将字符添加到集合中,并更新最大长度。
6、重复这个过程,直到右指针遍历完整个字符串。
function lengthOfLongestSubstring(s) {
const charSet = new Set(); // 用于存储无重复字符
let left = 0; // 左指针
let maxLength = 0; // 记录最大长度
for (let right = 0; right < s.length; right++) {
// 当右指针指向的字符在集合中,移动左指针
while (charSet.has(s[right])) {
charSet.delete(s[left]);
left++;
}
// 添加右指针指向的字符到集合中
charSet.add(s[right]);
// 更新最大长度
maxLength = Math.max(maxLength, right - left + 1);
}
return maxLength;
}
const inputString = "abcabcbb";
console.log(lengthOfLongestSubstring(inputString)); // 输出: 3 ("abc" 是最长无重复子串)展开评论点赞 - #刷题交流#
归并排序类问题,解题思路
分解:将数组分为两半。
解决:递归地对每个子数组进行归并排序。
合并:将两个已排序的子数组合并成一个大的已排序数组。
function mergeSort(array):
if length(array) <= 1:
return array
mid = length(array) / 2
left = mergeSort(array[0:mid])
right = mergeSort(array[mid:end])
return merge(left, right)
function merge(left, right):
result = []
while left and right are not empty:
if left[0] <= right[0]:
result.append(left[0])
left.remove(0)
else:
result.append(right[0])
right.remove(0)
return result + left + right展开评论点赞 - #刷题交流#
打卡:快速排序:分解:选取一个“基准”(pivot),将数组分为小于基准和大于基准的两部分。
解决:对这两部分递归地进行快速排序。
合并。
function quickSort(array):
if length(array) <= 1:
return array
pivot = array[length(array)/2]
left = [x for x in array if x < pivot]
middle = [x for x in array if x == pivot]
right = [x for x in array if x > pivot]
return quickSort(left) + middle + quickSort(right)展开赞过评论1 - #刷题交流#
打卡9:快速排序
分解:选取一个“基准”(pivot),将数组分为小于基准和大于基准的两部分。
解决:对这两部分递归地进行快速排序。
合并:因为排序是基于原地的,所以合并步骤是隐式的。
function quickSort(array):
if length(array) <= 1:
return array
pivot = array[length(array)/2]
left = [x for x in array if x < pivot]
middle = [x for x in array if x == pivot]
right = [x for x in array if x > pivot]
return quickSort(left) + middle + quickSort(right)展开评论点赞 - #刷题交流#
打卡8,分治法的案例:归并排序(Merge Sort)
分解:将数组分为两半。
解决:递归地对每个子数组进行归并排序。
合并:将两个已排序的子数组合并成一个大的已排序数组。
function mergeSort(array):
if length(array) <= 1:
return array
mid = length(array) / 2
left = mergeSort(array[0:mid])
right = mergeSort(array[mid:end])
return merge(left, right)
function merge(left, right):
result = []
while left and right are not empty:
if left[0] <= right[0]:
result.append(left[0])
left.remove(0)
else:
result.append(right[0])
right.remove(0)
return result + left + right展开赞过评论2