寻找替代算法
#include <bits/stdc++.h>
using namespace std;
//recursion to get sum of digits.
*int sum(int d)
{
return d==0?0:d%10+sum(d/10);
}*
int main()
{
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
int t;
cin>>t;
while(t-- >0)
{
int k;
cin>>k;
for(int i=0;i<20000;i++)
{
int total=sum(i);
if(total==10)
{
--k;
if(k==0)
cout<<i<<"\n";
}
}
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
int t;
cin>>t;
while(t-- >0)
{
int k;
cin>>k;
for(int i=0;i<20000;i++)
{
int sum=0,d=i;
*while(d!=0)
{
sum+=d%10;
d/=10;
}*
if(sum==10)
{
--k;
if(k==0)
cout<<i<<"\n";
}
}
}
return 0;
}
因此,需要更有效的替代算法。提前致谢
这是必需的数字动态程序的完整性。这一个将让您找到20万(更不用说20,000)几乎立即与二分搜索。
JavaScript代码:
function g(digits, i, sum, bound, memo){
const key = String([i, sum, bound]);
if (memo.hasOwnProperty(key))
return memo[key];
if (sum == 0)
return memo[key] = 1;
if (i == 0)
return sum <= (bound ? digits[0] : 9);
let result = 0;
const k = bound ? digits[i] : 9;
for (let d=0; d<=k && d<=sum; d++){
const _bound = digits[i] == d ? bound : 0;
result += g(digits, i-1, sum-d, _bound, memo);
}
return result;
}
function f(n, sum){
const digits = [];
while(n){
digits.push(n % 10);
n = Math.floor(n/10);
}
return g(digits, digits.length-1, sum, 1, {});
}
console.log(f(320002210, 10));
console.log(f(320002209, 10));
题目大意: You’re given k arrays, each array has k integers. There are k^k ways to pick exactly one element in each array and calculate the sum of the integers. Your task is to find the k smallest sums amo
你好,我正在尝试从IEEEXtreme 2014解决这个问题: 给你N个循环排列的整数。有N种方法可以拾取长度为M(M)的连续子序列 我的方法是首先创建一个排序数组列表,将新输入插入正确的位置。我将前M个整数添加到列表中。记录第K个最小值。然后我继续删除最旧的整数并将下一个整数添加到列表中,并将新的第K个值与旧的值进行比较。这是我的排序数组列表。 我认为这种蛮力方法效率不高,但还不能想出任何想法。
NowCoder 解题思路 快速选择 复杂度:O(N) + O(1) 只有当允许修改数组元素时才可以使用 快速排序的 partition() 方法,会返回一个整数 j 使得 a[l..j-1] 小于等于 a[j],且 a[j+1..h] 大于等于 a[j],此时 a[j] 就是数组的第 j 大元素。可以利用这个特性找出数组的第 K 个元素,这种找第 K 个元素的算法称为快速选择算法。 // jav
子数组包含正数和负数。你必须找到一个最大和子数组,使子数组的长度大于或等于k。 下面是我用C++编写的使用Kadane算法的代码。 我的代码工作得很好,但很慢,我想不出任何方法来改进我的代码。我也读过这个问题,找到最长的子数组,它的和可以被K整除,但这不是我想要的,长度也可以大于K。
我需要找到总和大于或等于< code>k的最小子阵列长度。数组将只有正数。 例如 输入:< code>target = 7,< code>nums = [2,3,1,2,4,3]输出:2说明:子数组[4,3]在问题约束下长度最小。 在我的代码中,对于输入:< code>target = 7,< code>nums = [2,3,1,2,4,3]我得到的答案是< code>3,但正确答案是< cod
一、题目 输入n个整数,找出其中最小的k个数。 例子说明: 例如输入4 、5 、1、6、2、7、3 、8 这8 个数字,则最小的4 个数字是1 、2、3 、4 二、解题思路 解法一:O(n)时间算法,只有可以修改输入数组时可用。 可以基于Partition函数来解决这个问题。如果基于数组的第k个数字来调整,使得比第k个数字小的所有数字都位于数组的左边,比第k个数字大的所有数字都位于数组的右边。这样