首页
学习
活动
专区
圈层
工具
发布

算法创作|求任意N个整数中的最大值和最小值

问题描述 如何求得任意N个整数的最大值与最小值 解决方案 解决这个问题有三种常见思路,第一种思路比较简单粗暴,就是对用户输入的每个整数两两之间进行比较,直到找到最大的整数和最小的整数为止。...第二种思路是将用户输入的整数放入一个空列表中,然后利用Python内置的max()函数和min()函数分别得到最大值和最小值。...第三种思路与第二种思路类似,也是将用户输入的整数放入一个空列表,然后对列表进行排序,列表下标为0的数即为最小值,列表下标为N-1的数即为最大值。...但在我们的实际操作中,用户难免会失误输入错误的数据类型,导致Python无法正常处理某一个或者一段代码的时候就终止运行并出现报错。 如下图: 这时候我们需要对代码进行调整,增强其处理异常数据的能力。...结语 求得任意N个整数的最大值与最小值方法多种多样,其中,将用户输入的整数放入一个空列表,随后对列表进行排序,并增强其处理异常数据的能力使我们的代码更加高效有用!

3.1K10

利用元组作为函数的返回值,求序列中的最大值、最小值和元素个数。

以下是Python的代码实现: def get_sequence_info(sequence): max_val = max(sequence) min_val = min(sequence...seq = [1, 2, 3, 4, 5] max_val, min_val, length = get_sequence_info(seq) print("最大值:", max_val) print("最小值...第2~4行在序列上使用内置函数max、min、len分别求出序列的最大值、最小值和元素个数。 第5行使用元组以逗号分隔的方式返回以上三个结果。...第811行创建一个序列`seq`,并在第1315行调用get_sequence_info函数,将返回元组中的值赋给对应的变量max_val、min_val和length。 最后输出相关信息。...使用元组作为函数返回值的好处是可以方便地在函数返回多个数值,而不需要显式构建字典或列表等数据结构。

1.1K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    子数组最小乘积的最大值(前缀和 + 单调栈)

    题目 一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。 比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) = 2 * 10 = 20 。...请注意,最小乘积的最大值考虑的是取余操作 之前 的结果。 题目保证最小乘积的最大值在 不取余 的情况下可以用 64 位有符号整数 保存。 子数组 定义为一个数组的 连续 部分。...解题 为了求子数组的和,需要得到前缀和 为了求以每个数为最小值的子数组的两端的极限位置(数字都大于0,越多越好),可以使用单调栈获取 时间复杂度 O(n) class Solution { public...s.empty() && nums[i] <= nums[s.top()]) s.pop();//左边比我大,我是最小的 if(!...s.empty() && nums[i] <= nums[s.top()]) s.pop();//右边比我大,我是最小的 if(!

    89140

    LeetCode Maximum Product Subarray 解题报告

    求:最大子数组乘积。...https://oj.leetcode.com/problems/maximum-product-subarray/ 题目分析:求一个数组,连续子数组的最大乘积。...事实上子数组乘积最大值的可能性为:累乘的最大值碰到了一个正数;或者。累乘的最小值(负数),碰到了一个负数。所以每次要保存累乘的最大(正数)和最小值(负数)。同一时候另一个选择起点的逻辑。...假设之前的最大和最小值同当前元素相乘之后,没有当前元素大(或小)那么当前元素就可作为新的起点。比如,前一个元素为0的情况,{1,0,9,2}。到9的时候9应该作为一个最大值,也就是新的起点。...{1,0,-9,-2}也是相同道理,-9比当前最小值还小,所以更新为当前最小值。 这样的方法仅仅须要遍历一次数组就可以,算法时间复杂度为O(n)。

    28820

    面试官本想拿一道求素数搞我,但被我优雅的回击了

    求一个质数 在这么一次的过程,面试官问我算法题我不吃惊,我实现早把十大排序原理、复杂度分析、代码手写实现出来了,也把链表、树的各种操作温习的滚瓜烂熟,不过突然就是很诧异的面试官来了一道求素数问题,我把场景还原一下...如果一个数不是质数,那么必定是两个数的乘积,而这两个数通常一个大一个小,并且小的小于等于根号n,大的大于等于根号n,我们只需要枚举小的可能范围,看看是否能够被整除,就可以判断这个数是否为素数啦。...观察上述的埃氏筛,有很多重复的计算,尤其是前面的素数,比如2和3的最小公倍数为6,每3次2的计算就也会遇到是3的倍数,而欧拉筛在埃氏筛的基础上改进,有效的避免了这个重复计算。 具体是何种思路呢?...不管这个数是不是素数,遍历已知素数将它和该素数的乘积值标记,如果这个素数能够被当前值i整除,那么停止操作进行下一轮。...你可以看到这个过程,6只标记12而不标记18,18被9*2标记。详细理解还需要多看看代码想想。过程图就不画啦!欧拉的思路就是离我较近的我给它标记。欧拉筛的时间复杂度为O(n),因为每个数只标记一次。

    46120

    手撕腾讯面试题-乘积最大子数组

    题目 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...示例 解题思路 注意点 本题要求的是乘积最大的连续子数组而不是乘积最大的子序列,因此要求子数组中的元素在原数组中是连续的。...动态规划 由于整数数组 nums 中的元素可能有正数、负数和 0,因此连续子数组中的元素也可能是这三种情况。...如果连续子数组中的元素存在负数,正数乘以负数就成负数,那么最大值乘以负数就变成了最小值,因此需要同时考虑当前连续子数组乘积的最大值curMax和最小值curMin。...举栗 以整数数组 nums = [2, 3, -2, 4] 为栗子,求乘积最大子数组的乘积。 如下图示: ?

    39730

    前端leetcde算法面试套路之双指针

    前言上一 part 刚写完二分和滑窗,他们都属于特殊的双指针方法,所以这一 part 直接汇总一下除了特殊的二分和滑窗外的其他双指针写法这里主要是快慢指针和端点指针, 解决一些一次遍历搞不掂,多个指针协商干活不累的题目...寻找重复数 那是因为这里的下标和值刚好没法完全重合,且有重复数,要是值也是从 0,n-1,那就没法子用值当下标的写法了题目汇总快慢指针环形链表 II寻找重复数删除有序数组中的重复项 II快乐数左右端点指针最接近的三数之和乘积小于...K的子数组有序数组的平方爱吃香蕉的珂珂救生艇二分法(这里只有链接,具体可以去看二分的题)模板1二分查找x 的平方根猜数字大小排列硬币搜索旋转排序数组 模板2第一个错误的版本寻找峰值寻找旋转排序数组中的最小值寻找旋转排序数组中的最小值...II 模板3在排序数组中查找元素的第一个和最后一个位置找到 K 个最接近的元素 其他Pow(x, n)有效的完全平方数寻找比目标字母大的最小字母两个数组的交集两个数组的交集 II两数之和 II - 输入有序数组寻找重复数...乘积小于K的子数组分析求的是符合要求的,连续的子数组的最大个数,盲猜可以用不定大小的滑窗处理移动 r 指针扩展窗口,然后当乘积超出 k 的时候,开始收缩 l 指针,最后得到一个符合要求的窗口 l,r在这个窗口

    52850

    手撕腾讯面试题-乘积最大子数组

    题目 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...image.png 解题思路 注意点 本题要求的是乘积最大的连续子数组而不是乘积最大的子序列,因此要求子数组中的元素在原数组中是连续的。...动态规划 由于整数数组 nums 中的元素可能有正数、负数和 0,因此连续子数组中的元素也可能是这三种情况。...如果连续子数组中的元素存在负数,正数乘以负数就成负数,那么最大值乘以负数就变成了最小值,因此需要同时考虑当前连续子数组乘积的最大值curMax和最小值curMin。...举栗 以整数数组 nums = [2, 3, -2, 4] 为栗子,求乘积最大子数组的乘积。

    83730

    【动态规划】子数组系列(上)

    环形子数组的最大和 这道题和上道题不同的就是是一个环形结构,首尾可以相连,这就会有下面两种情况 情况一和上一题是一样的,就是正常的求最大的子序列和,情况二就是首尾相连的情况,可以转化为求中间部分最小的子序列和...,再用总的数组和减去这部分最小的子序列和就是最大子序列和,这两种情况求最大值就可以了 状态表示和状态转移方程都和上一题是类似的 初始化:求最大子序列和时还是 dp[0] 初始化为 0,不过求最小子序列就不一样了...0 或者一个很大的数,不过不能设为 int 的最大值,不然可能会溢出 返回值:返回两种情况的最大值,不过有一种情况需要注意,当数组中全是负数的话,第一种情况求的就是负数,第二种情况求的最小值就是整个数组和...以 i 位置为结尾时的所有子数组中的最大乘积 以 i 位置为结尾时的所有子数组中的最小乘积 状态转移方程: 求 f[i] 时,如果说当前元素是一个负数,那么就需要乘上一个最小的负数,也就是 g[i -...,也就是 g[i - 1],如果是负数的话就需要找一个最大的正数来乘,最终确定最小值时需要再加上当前元素,这三个数一起求一个最小值即可 初始化:把 f[0] 和 g[0] 设置为 1 就不影响后续的乘积赋值

    22110

    【LeetCode】动态规划 刷题训练(七)

    5 整段数组的和为定值,若想取 当前红色区域的最大值,则需取空白区域的最小值 由于红色区域是不连续的,而空白区域为连续区间 所以可以先求 空白区域的最小子数组和 再通过整体数组和减去 空白区域的最小数组和...则为 红色区域的最大子数组和 ---- 情况1的最大子数组和 用 f 表示 情况2的最小子数组和用 g 表示 f[i]:表示以i为结尾的所有子数组中的最大和 g[i]:表示以i为结尾的所有子数组中的最小和...情况1 取f表中的最大值 即 fmax fmax即 情况1的最大子数组和 ---- 情况2 取g表中的最小值即 gmin 由于情况2的红色区域的最大子数组和 为 数组整体减去 白色区域子数组和 所以...[i]小于0 想求i位置处的最小乘积,就要先求i-1位置处的最大乘积即f[i-1] 再乘以nums[i],即 nums[i]小于0情况下,i位置处的最小乘积 即 g[i]=f[i-1]*nums[i]...乘积为正数 想求以i位置为结尾的 所有子数组中 乘积为正数的 最长长度,因为nums[i]小于0,则需先求以i-1位置结尾的 所有子数组中 乘积为负数的 最长长度即 g[i-1] 在加上后面i位置处的长度

    20830

    ​最大公约数、同余原理详解

    (三)时间复杂度若a > b,欧几里得算法的时间复杂度大致为(O(\log a)^3)。这是因为在每次迭代中,a和b中较大的数至少会变为原来的一半。...(四)求最小公倍数两个数a和b的最小公倍数可以通过公式(long)a/gcd(a,b)*b来计算。...原理是:两个数的乘积等于它们的最大公约数和最小公倍数的乘积,即a b = gcd(a,b) lcm(a,b),所以lcm(a,b) = a b / gcd(a,b)。...三、其他相关知识(一)Stein 算法Stein 算法是一种针对大整数运算的求最大公约数算法,它避免了大整数的除法运算,因为大整数除法运算相对复杂且耗时。...例如在leetcode题目中,要求结果对某个大的素数求%,那么在计算过程中,必须对某个大的素数不断求%。

    35400

    常见算法面试题

    -- 《编程之美》 列举几种解法 解法1:如果元素不是很多,用快速排序,然后遍历找到最大的K个。总的时间复杂度为 O(N logN) + O(K) 解法2:找K个数中最小的那个,就是第K大的数。...利用二分搜索找到第K大的数,然后在遍历。总的时间复杂度为 O(NlogN) 解法3:如果数据不能全部装入内存,上面两种方法不是很好。可以利用堆排序,即维护一个K个元素的最小堆即可。...每次新考虑的一个数,如果比堆的最小数还要小,丢弃;如果比堆的最小数要大,那么替换最小元素,然后调整堆。...算法还是能保持O(N)的时间复杂度的。 eg4.2:求一个int(32bit)中,二进制1的个数。 -- 《代码之美》 可以参考eg1.1的方法1、方法2、方法3 2....如果n为even 结果为去掉绝对值最小的正数的乘积 eg5.3:估计一下快速排序的比较次数。

    1.3K20

    2025-06-02:最小可整除数位乘积Ⅱ。用go语言,给定一个表示正整数的字符串 num 和一个整数 t。 定义:如果一个整数

    2025-06-02:最小可整除数位乘积Ⅱ。用go语言,给定一个表示正整数的字符串 num 和一个整数 t。 定义:如果一个整数的每一位都不是 0,则称该整数为“无零数字”。...尝试构造和 num 长度相同的数字: • 从 num 的最高位开始,尝试找到一个比 num 大的数字,其数字乘积能被 t 整除。...构造比 num 更长的数字: • 如果无法找到和 num 长度相同的数字,则构造一个比 num 长的最小数字。...• 将 t 分解为 9 到 2 的数字的乘积,然后按从小到大的顺序排列这些数字(因为我们需要最小的数字)。 • 如果分解后的数字位数不足,补 1(因为 1 不影响乘积)。...• 构造更长数字:O(log t),因为需要分解 t 为数字的乘积。 • 总体时间复杂度:O(n^2 + log t)。对于大 n(如 2e5),这可能会很慢。

    8400

    【力扣刷题】整数拆分(动态规划)

    x*((n-x)的乘积最大化),将子问题求的解即将2到n的所有乘积最大化存入数组dp[n]中,那么乘积就是x*dp[n-x] 用for循环按照上面的方法求2~n的乘积最大化,比如: 求2的乘积最大化:...不可以继续拆分,乘积是1*(2-1)为1 求3的乘积最大化:  可以拆分为1和2,2不拆分的乘积为2,拆分的乘积为1*dp[3-1]也就是1,取不拆分的乘积和拆分的乘积的最大值为2 求4的乘积最大化:...可以拆分为1和3,3不拆分的乘积为3,拆分的乘积为1*dp[4-1]也就是2,取不拆分的乘积和拆分的乘积的最大值为3 可以拆分为2和2,2不拆分的乘积为4,拆分的乘积为2*dp[4-2]也就是2,取不拆分的乘积和拆分的乘积的最大值为...因为求最大值的功能经常使用,使用用三目运算符?:写个求最大值的函数Max() 由于每个正整数对应的最大乘积取决于比它小的正整数对应的最大乘积,因此可以使用动态规划求解。...特别地,00 不是正整数,11 是最小的正整数,00 和 11 都不能拆分,因此dp[0]和dp[1]一定要赋值为0,如果不赋值为0,直接int dp[n];就会出现以下状况  赋初值为0:  +

    66060

    算法题系列之二:求最大子数组之积

    题目描述: 给定一个长度为N的整数数组,只允许用乘法,计算任意(N-1)个数的组合中乘积最大的一组。...算法分析: 动态规划的做法,假设数组为a[N],max[N]表示以下标为i结尾的子数组乘积最大值,min[N]表示以下标为i结尾的子数组乘积最小值。...为了处理数组元素为负的问题,必须将最小乘积也保存起来。...很容易想到,若当前元素a[i]为负数,那么a[i]*max[i-1]得到的值并不一定比a[i] * min[i-1]大,因为min[i-1]可能为负,如果min[i-1]的绝对值大于max[i-1],那么...因此有以下转移方程 求三者最大 max[i] = MaxinThree(a[i], a[i]*max[i-1], a[i]*min[i-1]) 求三者最小 min[i] = MininThree(a[

    86460

    前端leetcde算法面试套路之双指针

    前言上一 part 刚写完二分和滑窗,他们都属于特殊的双指针方法,所以这一 part 直接汇总一下除了特殊的二分和滑窗外的其他双指针写法这里主要是快慢指针和端点指针, 解决一些一次遍历搞不掂,多个指针协商干活不累的题目...,根据最大值和最小值之间的运算来求值的,这个时候也需要端点指针找重复值的时候,转换成链表找环 -- 快慢指针的变形在做快慢指针的题目的时候,咋一看题目和快慢指针没有一毛线关系,但是一般都是迭代啊,或者重复值啊什么的...如果不符合条件,肯定就是遭遇到循环了,这里用 set 缓存所有迭代过程中的 ret,只有迭代过程中再次出现 set 中的值,就是导致循环了,直接返回false 即可时间复杂度,这个不太会求,但是会需要...乘积小于K的子数组分析求的是符合要求的,连续的子数组的最大个数,盲猜可以用不定大小的滑窗处理移动 r 指针扩展窗口,然后当乘积超出 k 的时候,开始收缩 l 指针,最后得到一个符合要求的窗口 l,r在这个窗口...numsr 可能就比 k 大,这个情况应该收缩窗口为 0,并走到下一步时间复杂度 O(n) var numSubarrayProductLessThanK = function (nums, k) {

    28030

    C++020-C++因数,公因数,公倍数

    它的具体做法是: 用较大数m除较小数n,得到的余数r作为下次运算中的较小数m,原来的n作为下次运算中的较大数。 如此反复,直到最后余数是O为止,最后的除数就是这两个数的最大公约数。...cout<<b<<endl; return 0; } 最小公倍数 两个或多个整数公有的倍数叫做它们的公倍数,其中除O以外最小的一个公倍数就叫做这几个整数的最小公倍数。...求解最小公倍数的方法 枚举法 利用枚举的思想,把任意一个数的倍数从小到大求余另外一个数字,如果能整除,就是最小公倍数。...由于两个数的乘积等于这两个数的最大公约数(x)与最小公倍数(y)的积,可以利用最大公约数求两个数字m和n 的最小公倍数m*n==x*y 步骤: 求两个数字的最大公约数,设为x m/x*n得到m和...,求原数 【描述】已知两个数a和b的最大公约数是G,最小公倍数是L,问这两个数可能是多少?

    52120

    前端leetcde算法面试套路之双指针4

    前言上一 part 刚写完二分和滑窗,他们都属于特殊的双指针方法,所以这一 part 直接汇总一下除了特殊的二分和滑窗外的其他双指针写法这里主要是快慢指针和端点指针, 解决一些一次遍历搞不掂,多个指针协商干活不累的题目...,根据最大值和最小值之间的运算来求值的,这个时候也需要端点指针找重复值的时候,转换成链表找环 -- 快慢指针的变形在做快慢指针的题目的时候,咋一看题目和快慢指针没有一毛线关系,但是一般都是迭代啊,或者重复值啊什么的...如果不符合条件,肯定就是遭遇到循环了,这里用 set 缓存所有迭代过程中的 ret,只有迭代过程中再次出现 set 中的值,就是导致循环了,直接返回false 即可时间复杂度,这个不太会求,但是会需要...乘积小于K的子数组分析求的是符合要求的,连续的子数组的最大个数,盲猜可以用不定大小的滑窗处理移动 r 指针扩展窗口,然后当乘积超出 k 的时候,开始收缩 l 指针,最后得到一个符合要求的窗口 l,r在这个窗口...numsr 可能就比 k 大,这个情况应该收缩窗口为 0,并走到下一步时间复杂度 O(n) var numSubarrayProductLessThanK = function (nums, k) {

    31540

    动态规划(八)——子数组系列(求积问题)

    结合这里的题目要求+经验+我们的分析,创建两个dp表,一个求最大子数组乘积,一个求最小子数组乘积: dp1表中的dp1[i]表示为以【i】位置为结尾最大子数组乘积~...dp2表中的dp2[i]表示为以【i】位置为结尾最小子数组乘积~ 2、状态转移方程 我们以离【i】位置最近的状态分析状态转移方程,处理dp1表 既然状态表示为:...,处理dp2表 既然状态表示为:以【i】位置为结尾最小子数组乘积~ ,那么第i个位置肯定在子数组中,那么以【i】位置为结尾的最小乘积子数组长度可能为1,那么就是它本身;以【i】位置为结尾为结尾的最小乘积子数组长度可能大于...: 1、状态表示 题目要求:求解乘积为正数的最长连续子数组长度~ 结合这里的题目要求+经验+我们的分析,创建两个dp表,一个求乘积为正数最长子数组长度,一个求乘积为负数最长子数组长度...,我们求长度不希望影响到后面的结果的话,我们知道0加任何数等于这个数本身,那么我们让dp1[0]=dp2[0]=1就可以了~ 同时要注意下标映射关系~ 那么我们初始化结果就是

    13800
    领券