{"id":593,"date":"2025-07-09T19:00:42","date_gmt":"2025-07-09T13:30:42","guid":{"rendered":"https:\/\/codeanddebug.in\/blog\/?p=593"},"modified":"2025-07-09T19:00:44","modified_gmt":"2025-07-09T13:30:44","slug":"find-the-smallest-divisor-given-a-threshold-leetcode-1283","status":"publish","type":"post","link":"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/","title":{"rendered":"Find the Smallest Divisor Given a Threshold | Leetcode 1283"},"content":{"rendered":"\n<p>The &#8220;Find the Smallest Divisor Given a Threshold&#8221; problem is a classic binary search question that helps you practice optimization under constraints. <\/p>\n\n\n\n<p>In this blog, we\u2019ll explain the problem, walk you through both brute force and optimal solutions, and make everything easy to understand with code comments, dry runs, and clear explanations.<\/p>\n\n\n\n<p>Here&#8217;s the [<strong><a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\"><span style=\"text-decoration: underline;\">Problem Link<\/span><\/mark><\/a><\/strong>] to begin with.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Given an array of integers&nbsp;<code>nums<\/code>&nbsp;and an integer&nbsp;<code>threshold<\/code>, we will choose a positive integer&nbsp;<code>divisor<\/code>, divide all the array by it, and sum the division&#8217;s result. Find the&nbsp;<strong>smallest<\/strong>&nbsp;<code>divisor<\/code>&nbsp;such that the result mentioned above is less than or equal to&nbsp;<code>threshold<\/code>.<\/p>\n\n\n\n<p>Each result of the division is rounded to the nearest integer greater than or equal to that element. (For example:&nbsp;<code>7\/3 = 3<\/code>&nbsp;and&nbsp;<code>10\/2 = 5<\/code>).<\/p>\n\n\n\n<p>The test cases are generated so&nbsp;that there will be an answer.<\/p>\n\n\n\n<p><strong>Example 1:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Input:<\/strong> nums = [1,2,5,9], threshold = 6<br><strong>Output:<\/strong> 5<br><strong>Explanation:<\/strong> We can get a sum to 17 (1+2+5+9) if the divisor is 1. <br>If the divisor is 4 we can get a sum of 7 (1+1+2+3) and if the divisor is 5 the sum will be 5 (1+1+1+2). <\/pre>\n\n\n\n<p><strong>Example 2:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Input:<\/strong> nums = [44,22,33,11,1], threshold = 5<br><strong>Output:<\/strong> 44<\/pre>\n\n\n\n<p><strong>Constraints:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>1 &lt;= nums.length &lt;= 5 * 10<sup>4<\/sup><\/code><\/li>\n\n\n\n<li><code>1 &lt;= nums[i] &lt;= 10<sup>6<\/sup><\/code><\/li>\n\n\n\n<li><code>nums.length &lt;= threshold &lt;= 10<sup>6<\/sup><\/code><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-ub-table-of-contents-block ub_table-of-contents\" id=\"ub_table-of-contents-162ea8ff-7cf9-4462-a5fa-604e793e52a3\" data-linktodivider=\"false\" data-showtext=\"show\" data-hidetext=\"hide\" data-scrolltype=\"auto\" data-enablesmoothscroll=\"false\" data-initiallyhideonmobile=\"false\" data-initiallyshow=\"true\"><div class=\"ub_table-of-contents-header-container\" style=\"\">\n\t\t\t<div class=\"ub_table-of-contents-header\" style=\"text-align: left; \">\n\t\t\t\t<div class=\"ub_table-of-contents-title\">Contents:<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t<\/div><div class=\"ub_table-of-contents-extra-container\" style=\"\">\n\t\t\t<div class=\"ub_table-of-contents-container ub_table-of-contents-1-column \">\n\t\t\t\t<ul style=\"\"><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#0-brute-force-solution-try-every-possible-divisor\" style=\"\">Brute Force Solution (Try Every Possible Divisor)<\/a><ul><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#1-intuition-and-approach\" style=\"\">Intuition and Approach<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#2-code-implementation\" style=\"\">Code Implementation<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#3-code-explanation\" style=\"\">Code Explanation<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#4-dry-run\" style=\"\">Dry Run<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#5-time-and-space-complexity\" style=\"\">Time and Space Complexity<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#6-conclusion\" style=\"\">Conclusion<\/a><\/li><\/ul><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#7-optimal-solution-binary-search\" style=\"\">Optimal Solution (Binary Search)<\/a><ul><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#8-intuition-and-approach\" style=\"\">Intuition and Approach<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#9-code-implementation\" style=\"\">Code Implementation<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#10-code-explanation\" style=\"\">Code Explanation<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#11-dry-run\" style=\"\">Dry Run<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#12-time-and-space-complexity\" style=\"\">Time and Space Complexity<\/a><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#13-conclusion\" style=\"\">Conclusion<\/a><\/li><\/ul><\/li><li style=\"\"><a href=\"https:\/\/codeanddebug.in\/blog\/find-the-smallest-divisor-given-a-threshold-leetcode-1283\/#14-final-thoughts\" style=\"\">Final Thoughts<\/a><\/li><\/ul>\n\t\t\t<\/div>\n\t\t<\/div><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0-brute-force-solution-try-every-possible-divisor\">Brute Force Solution (Try Every Possible Divisor)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-intuition-and-approach\">Intuition and Approach<\/h3>\n\n\n\n<p>Let\u2019s solve the problem in the most straightforward way:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Try Every Divisor:<\/strong><br>Try every possible divisor from 1 up to the largest number in the array.<\/li>\n\n\n\n<li><strong>Check If It Meets the Threshold:<\/strong><br>For each divisor, calculate the total sum (rounded up for each element). If the sum is within the threshold, return the divisor.<\/li>\n\n\n\n<li><strong>Why does this work?<\/strong><br>We check every possible divisor, so we\u2019re sure to find the smallest one that works.<\/li>\n<\/ol>\n\n\n\n<p>This approach is easy to understand but not efficient for large numbers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-code-implementation\">Code Implementation<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import math\nfrom typing import List\n\nclass Solution:\n    def getThreshold(self, x, nums, threshold):\n        total = 0\n        for num in nums:\n            total += math.ceil(num \/ x)    # Divide and round up for each element\n        return total &lt;= threshold\n\n    def smallestDivisor(self, nums: List[int], threshold: int) -&gt; int:\n        max_num = max(nums)\n        for divisor in range(1, max_num + 1):   # Try every possible divisor\n            if self.getThreshold(divisor, nums, threshold):\n                return divisor                  # Return the first valid divisor\n        return max_num\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> math<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">from<\/span><span style=\"color: #E1E4E8\"> typing <\/span><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> List<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Solution<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">getThreshold<\/span><span style=\"color: #E1E4E8\">(self, x, nums, threshold):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        total <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> num <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> nums:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            total <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> math.ceil(num <\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #E1E4E8\"> x)    <\/span><span style=\"color: #6A737D\"># Divide and round up for each element<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> total <\/span><span style=\"color: #F97583\">&lt;=<\/span><span style=\"color: #E1E4E8\"> threshold<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">smallestDivisor<\/span><span style=\"color: #E1E4E8\">(self, nums: List[<\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">], threshold: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">) -&gt; <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        max_num <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">max<\/span><span style=\"color: #E1E4E8\">(nums)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> divisor <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">, max_num <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">):   <\/span><span style=\"color: #6A737D\"># Try every possible divisor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.getThreshold(divisor, nums, threshold):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> divisor                  <\/span><span style=\"color: #6A737D\"># Return the first valid divisor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> max_num<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-code-explanation\">Code Explanation<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For each divisor from 1 to the maximum number in the array, check if the sum is within the threshold.<\/li>\n\n\n\n<li>Use a helper function to calculate the total sum for a given divisor.<\/li>\n\n\n\n<li>Return the first divisor that satisfies the condition.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-dry-run\">Dry Run<\/h3>\n\n\n\n<p><strong>Input:<\/strong><br><code>nums = [1], threshold = 6<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>divisor = 1:&nbsp;<a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>&nbsp;\u2192 sum = 17 (too high)<\/li>\n\n\n\n<li>divisor = 2:&nbsp;<a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>&nbsp;\u2192 sum = 10 (too high)<\/li>\n\n\n\n<li>divisor = 3:&nbsp;<a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>&nbsp;\u2192 sum = 7 (too high)<\/li>\n\n\n\n<li>divisor = 4:&nbsp;<a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>&nbsp;\u2192 sum = 7 (too high)<\/li>\n\n\n\n<li>divisor = 5:&nbsp;<a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/leetcode.com\/problems\/find-the-smallest-divisor-given-a-threshold\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>&nbsp;\u2192 sum = 5 (valid, return 5)<\/li>\n<\/ul>\n\n\n\n<p><strong>Final Output:<\/strong><br><code>5<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5-time-and-space-complexity\">Time and Space Complexity<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Time Complexity:<\/strong>&nbsp;O(max(nums) * n)<br>For each divisor, we check all elements.<\/li>\n\n\n\n<li><strong>Space Complexity:<\/strong>&nbsp;O(1)<br>Only variables for counting.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"6-conclusion\">Conclusion<\/h3>\n\n\n\n<p>The brute force approach is simple and works for small inputs, but it\u2019s too slow for large values.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"7-optimal-solution-binary-search\">Optimal Solution (Binary Search)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"8-intuition-and-approach\">Intuition and Approach<\/h3>\n\n\n\n<p>We can do much better using binary search:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Binary Search on Divisor:<\/strong><br>The answer lies between 1 and the largest number in the array. Use binary search to find the smallest divisor.<\/li>\n\n\n\n<li><strong>Check If It Meets the Threshold:<\/strong><br>For each mid value (divisor), calculate the total sum. If it\u2019s within the threshold, try a smaller divisor; otherwise, try a larger one.<\/li>\n\n\n\n<li><strong>Why does this work?<\/strong><br>The total sum function is monotonic: as the divisor increases, the sum decreases. Binary search is perfect for this.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"9-code-implementation\">Code Implementation<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import math\nfrom typing import List\n\nclass Solution:\n    def calTotal(self, nums, n):\n        total = 0\n        for num in nums:\n            total = total + math.ceil(num \/ n)  # Divide and round up for each element\n        return total\n\n    def smallestDivisor(self, nums: List[int], threshold: int) -&gt; int:\n        maxi = max(nums)\n        low = 1\n        high = maxi\n        ans = 0\n        while low &lt;= high:\n            mid = (low + high) \/\/ 2\n            total = self.calTotal(nums, mid)\n            if total &lt;= threshold:\n                ans = mid         # Try to find a smaller valid divisor\n                high = mid - 1\n            else:\n                low = mid + 1     # Need a larger divisor\n        return ans\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> math<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">from<\/span><span style=\"color: #E1E4E8\"> typing <\/span><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> List<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Solution<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">calTotal<\/span><span style=\"color: #E1E4E8\">(self, nums, n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        total <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> num <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> nums:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            total <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> total <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> math.ceil(num <\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #E1E4E8\"> n)  <\/span><span style=\"color: #6A737D\"># Divide and round up for each element<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> total<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">smallestDivisor<\/span><span style=\"color: #E1E4E8\">(self, nums: List[<\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">], threshold: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">) -&gt; <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        maxi <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">max<\/span><span style=\"color: #E1E4E8\">(nums)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        low <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        high <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> maxi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        ans <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> low <\/span><span style=\"color: #F97583\">&lt;=<\/span><span style=\"color: #E1E4E8\"> high:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            mid <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> (low <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> high) <\/span><span style=\"color: #F97583\">\/\/<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            total <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.calTotal(nums, mid)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> total <\/span><span style=\"color: #F97583\">&lt;=<\/span><span style=\"color: #E1E4E8\"> threshold:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                ans <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> mid         <\/span><span style=\"color: #6A737D\"># Try to find a smaller valid divisor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                high <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> mid <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                low <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> mid <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">     <\/span><span style=\"color: #6A737D\"># Need a larger divisor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> ans<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"10-code-explanation\">Code Explanation<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use binary search between 1 and the maximum number in the array.<\/li>\n\n\n\n<li>For each mid divisor, calculate the total sum.<\/li>\n\n\n\n<li>If the sum is within threshold, store the divisor and try smaller.<\/li>\n\n\n\n<li>If not, try larger divisors.<\/li>\n\n\n\n<li>Return the minimum valid divisor found.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"11-dry-run\">Dry Run<\/h3>\n\n\n\n<p><strong>Input:<\/strong><br><code>nums = [1], threshold = 6<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>low = 1, high = 9<\/li>\n\n\n\n<li>mid = 5, total = 5 (valid, try smaller \u2192 high = 4)<\/li>\n\n\n\n<li>mid = 2, total = 10 (too high, try larger \u2192 low = 3)<\/li>\n\n\n\n<li>mid = 3, total = 7 (too high, try larger \u2192 low = 4)<\/li>\n\n\n\n<li>mid = 4, total = 7 (too high, try larger \u2192 low = 5)<\/li>\n\n\n\n<li>Loop ends, answer is 5.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"12-time-and-space-complexity\">Time and Space Complexity<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Time Complexity:<\/strong>&nbsp;O(n * log(max(nums)))<br>Binary search on divisor, checking all elements for each guess.<\/li>\n\n\n\n<li><strong>Space Complexity:<\/strong>&nbsp;O(1)<br>Only variables for counting.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"13-conclusion\">Conclusion<\/h3>\n\n\n\n<p>The optimal solution is efficient and works well for large arrays and high values. It\u2019s the best approach for interviews and practical use.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"14-final-thoughts\">Final Thoughts<\/h2>\n\n\n\n<p>The &#8220;Find the Smallest Divisor Given a Threshold&#8221; problem is a great example of how to optimize from brute force to an efficient binary search solution. Start with brute force to understand the basics, then use binary search for best performance.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/codeanddebug.in\/course\/zero-to-hero-python-dsa\" target=\"_blank\" rel=\"noreferrer noopener\">Join our Advance DSA COURSE<\/a><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>For any changes to the article, kindly email at <a href=\"mailto:code@codeanddebug.in\" target=\"_blank\" rel=\"noreferrer noopener\">code@codeanddebug.in<\/a> or contact us at <a href=\"tel:+91-9712928220\" target=\"_blank\" rel=\"noreferrer noopener\">+91-9712928220<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The &#8220;Find the Smallest Divisor Given a Threshold&#8221; problem is a classic binary search question that helps you practice optimization under constraints. In this blog, we\u2019ll explain the problem, walk you through both brute force and optimal solutions, and make everything easy to understand with code comments, dry runs, and clear explanations. Here&#8217;s the [Problem<\/p>\n","protected":false},"author":1,"featured_media":594,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,6],"tags":[28,19],"class_list":{"0":"post-593","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-data-structures-and-algorithm","8":"category-intermediate","9":"tag-binary-search-on-answers","10":"tag-medium"},"featured_image_src":"https:\/\/codeanddebug.in\/blog\/wp-content\/uploads\/2025\/07\/find-the-smallest-divisor-given-a-threshold-featured-image.png","author_info":{"display_name":"codeanddebug","author_link":"https:\/\/codeanddebug.in\/blog\/author\/codeanddebug\/"},"_links":{"self":[{"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/posts\/593","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/comments?post=593"}],"version-history":[{"count":3,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/posts\/593\/revisions"}],"predecessor-version":[{"id":598,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/posts\/593\/revisions\/598"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/media\/594"}],"wp:attachment":[{"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/media?parent=593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/categories?post=593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/tags?post=593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}