数据结构与算法
文章平均质量分 69
java语言数据结构与算法
input_out
这个作者很懒,什么都没留下…
展开
-
股票的最大利润(剑指 Offer 63)
股票的最大利润(剑指 Offer 63)1 题目描述假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。2 思路分析使用暴力法第一份层循环指向买的一天,第二层循环一次遍历以后的每一天找到利润最大的一次交易可得时间复杂度原创 2022-02-14 16:36:00 · 474 阅读 · 0 评论 -
最长不含重复字符的子字符串(剑指 Offer 48)
最长不含重复字符的子字符串(剑指 Offer 48)1 问题描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。2 解题思路长度为N的字符串共有(n+1)n/2个子字符串遍历复杂度为O(n²),判断长度为 N 的字符串是否有重复字符的复杂度为 O(N) ,因此本题使用暴力法解决的复杂度为O(n³)。第一次想到使用HashSet降低,判断长度为 N 的字符原创 2022-02-13 21:45:05 · 256 阅读 · 0 评论 -
连续子数组的最大和
连续子数组的最大和1 题目描述输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。2 解题思路本题使用暴力法两层循环可解决,时间复杂度为O(n²)。可使用动态规划降低时间复杂度。在第一次使用动态规划时想到用二维数组保存结果dp[i][j]表示从nums[i]到nums[j]的子数组的原创 2022-02-11 16:04:47 · 302 阅读 · 0 评论 -
滑动窗口的最大值(剑指Offer59)
滑动窗口的最大值(剑指Offer59)文章目录滑动窗口的最大值(剑指Offer59)1 题目描述2 暴力法解题思路3 代码4 复杂度分析5 优化思路1 题目描述给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3原创 2022-02-09 16:37:00 · 268 阅读 · 0 评论 -
包含min函数的栈(剑指Offer30)
包含min函数的栈(剑指Offer30)1 问题描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.原创 2022-02-08 23:51:25 · 92 阅读 · 0 评论