K数和

public class Solution {
/**
* @param A: an integer array.
* @param k: a positive integer (k <= length(A))
* @param target: a integer
* @return a list of lists of integer
*/
static ArrayList<ArrayList<Integer>> arraylist = new ArrayList<ArrayList<Integer>>();
static ArrayList<Integer> neiArrayList =new ArrayList<Integer>();
public static ArrayList<ArrayList<Integer>> choice(int[] arry,int n,int m,int M,int[] b,int target) {
int sum=0;
for(int i=n;i>=m;i--){
if(m>1){
b[m-1]=i-1;
choice(arry, i-1, m-1, M, b,target);//组合为 choice(arry, i-1, m-1, M, b);
}
else {
ArrayList<Integer> tempArrayList =new ArrayList<Integer>();
b[0]=i-1;
for(int j=M-1;j>=0;j--){
neiArrayList.add(arry[b[j]]);
sum+=arry[b[j]];
}

for(int k=0;k<neiArrayList.size();k++)
{
tempArrayList.add(neiArrayList.get(k));
}
neiArrayList.clear();
if(sum==target)
arraylist.add(tempArrayList);

sum=0;
}
}
return arraylist;
}
public ArrayList<ArrayList<Integer>> kSumII(int A[], int k, int target) {
int[] b=new int[100];
int n=A.length;
int m=k;
int M=k;
return choice(A,n,m,M,b,target);

}
}

时间: 2024-10-20 08:00:01

K数和的相关文章

[LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)

二分.情况讨论 因为数组有序,所以能够考虑用二分.通过二分剔除掉肯定不是第k位数的区间.如果数组A和B当前处理的下标各自是mid1和mid2.则 1.假设A[mid1]<B[mid2], ①.若mid1+mid2+2==k(+2是由于下标是从0開始的),则 mid1在大有序数组中下标肯定小于k,所以能够排除[0,mid1].此外.B[mid2]下标大于或等于k.能够排除[mid2+1,n]: ②.若mid1+mid2+2<k,则 mid1在大有序数组中下标肯定小于k,所以能够排除[0,mid1

[LeetCode]Median of Two Sorted Arrays查找第k数(中位数)

二分.情况讨论 class Solution { public: int findPos(int* p,int n,int x){ int low=0,high=n-1,mid; while(low<=high){ mid=(low+high)>>1; if(p[mid]<=x)low=mid+1; else high=mid-1; } return low; } double findK(int a[], int m, int b[], int n,int k){ int mid

90 k数和 II

原题网址:https://www.lintcode.com/problem/k-sum-ii/description 描述 Given n unique integers, number k (1<=k<=n) and target. Find all possible k integers where their sum is target. 您在真实的面试中是否遇到过这个题?  是 样例 给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]] 标签 LintC

如何选择K-Means中K的值

K-Means需要设定一个簇心个数的参数,现实中,最常用于确定K数的方法, 其实还是人手工设定.例如,当我们决定将衣服做成几个码的时候,其实就是在以 人的衣服的长和宽为为特征进行聚类.所以,弄清楚我们更在意的是什么,能够 引导选择更合适的K值. 有种方法能自动决定K值,也就是所谓的Elbow Method(DIVFRP层次聚类etc.). 它的idea是将不同K值及其相对应的cost function值画出来,将转折明显的地方K值设置 为最合适的K.如图: 但实际上,它并不是总是好用的.有时整个

单向列表的倒数第k个结点的值 python实现

1 #初始化链表的结点 2 class Node(): 3 def __init__(self,item): 4 self.item = item 5 self.next = None 6 7 #传入头结点,获取整个链表的长度 8 def length(headNode): 9 if headNode == None: 10 return None 11 count = 0 12 currentNode =headNode 13 #尝试了一下带有环的链表,计算长度是否会死循环,确实如此,故加上了

Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)

Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序,并将所有排列编号(从0开始),给出排列的编号得到对应排列)用到的式子.可以想到用逆康托展开的方法.但是需要一些变化: for(i=n;i>=1;i--) { s[i-1]+=s[i]/(n-i+1); s[i]%=(n-i+1); } 例如:n=3时,3=0*2!+0*1!+3*0!应该变为3=1

【Leetcode】【4Sum】【四数之和】【C++】

题目:给定一个整数数组nums和一个目标值target,判断是否存在四个数a,b,c,d,使得a+b+c+d=target?找出所有满足条件且不重复的四元组 示例: nums = [1, 0, -1, 0, -2, 2],和 target = 0 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ] 说明: 注意找出的四元组不重合,即没有相同的四元组:且四元组按从小到大的顺序输出. 思路1:对nums数组排序,然后两个for循

尽量少嵌套无用的div;外部文件尽量使用link而不要使用用@import

最近的工作又学到了很多东西,在这里记录一下. 1,尽量少嵌套无用的div,这个问题领导很严肃的跟我提过很多次,因为我很喜欢用很多div,而且有很多div都是无存在意义的.后来领导给了我一些资料,我看了一下,发现这样做确实存在很大的问题,原因如下:(以下蓝底文字摘自搜狐WEB标准) 2.1 节约运营成本 采用 WEB 标准制作,我们可以做到表现和形式及内容的分离,我们采用XHTML 语言来表现(数据),用CSS 来控制(页面元素呈现的)形式.写的好的页面,XHTML 代码中基本上都是用户要看的数据

【转】Bri&#39;s改装笔记

网上关于三菱蓝瑟的改装方案的文章不少,但在以不换发动机为前提的理性改装确是这两篇和东南汽车俱乐部科仔的那篇<4G18的低成本NA玩法>最具参考价值. 小排量NA车的乐趣不在于跟人比直线加速,在于操控.走街和弯道时候的乐趣. -----------------------------------------------------------------------------------------------------------------------------------------