我必须写代码来取一个具有奇数个元素的排序双数组,找到它们之间距离最短的值对,并返回剩余的值,这被认为是“奇数”。以下是我编写的代码,它可以工作并返回正确的值。
有人能帮我找到我使用的算法的时间复杂度吗?我试过了,但真的很困惑。
public static Double findPairs(Double[] data, int i, int j, int k, int count) {
Double oddNumber = -1.;
if ((k < data.length) && (diff(data[i], data[j]) <= diff(data[j], data[k]))) {
data[i] = (-1.);
data[j] = (-1.);
if (k == data.length - 1) {
for (int c = 0; c < data.length; c++) {
if (data[c] != -1.) {
i = c;
break;
}
}
if (i != k) {
for (int c = 0; c < data.length; c++) {
if ((c > i) && (data[c] != -1.)) {
j = c;
break;
}
}
findPairs(data, i, j, k, count + 1);
}
}
else {
for (int c = 0; c < data.length; c++) {
if (data[c] != -1.) {
i = c;
break;
}
}
for (int c = 0; c < data.length; c++) {
if ((c > i) && (data[c] != -1.)) {
j = c;
break;
}
}
for (int c = 0; c < data.length; c++) {
if ((c > j) && (data[c] != -1.)) {
k = c;
break;
}
}
findPairs(data, i, j, k, count + 1);
}
}
else if ((k < data.length) && (diff(data[i], data[j]) > diff(data[j], data[k]))) {
if (k == data.length - 1) {
data[j] = (-1.);
data[k] = (-1.);
}
else {
i = j; j = k;
for (int c = 0; c < data.length; c++) {
if ((c > j) && (data[c] != -1.)) {
k = c;
break;
}
}
findPairs(data, i, j, k, count);
}
}
for (int c = 0; c < data.length; c++) {
if (data[c] != -1) {
oddNumber = data[c];
}
}
return oddNumber;
}
算法:从数组的第一、第二和第三个元素开始。比较第一和第二元素以及第二和第三元素之间的差异。如果第一个差小于或等于后一个,则将前两个元素设为(-1)。否则,对第二、第三和第四个元素执行相同的操作。继续这个过程。当第一个差小于第二个差时,将相对元素设置为(-1),并从数组的开头搜索不是(-1)的元素。从你找到的前三个元素开始,重复这个过程。当第二个差异小于第一个差异时,将三个元素中的第一个元素放在一边,然后检查下三个元素。这样做直到你到达数组的末尾。
在最坏的情况下,您可以按照算法的措辞和编写代码的方式,在算法从查找一对到下一对(将设置为-1)的过程中,对列表中的越来越多项进行迭代。因此,最坏情况下的运行时间似乎是O(n^2)。
主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内
算法的时间与空间复杂度 看到群里们小伙伴在讨论算法复杂度问题,之前在极客时间看了王争的《数据结构与算法之美》,看的我也晕呼呼的,跟上学时在学校老师的讲的有点不一样了,网上搜了下各种各样的,结合参考作一篇简单易懂的总结。 什么是算法 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 如何评价一个算法的好坏 一般我们会从以下维度来评估算法的优劣 正确性
问题内容: 从Scala 2.9版开始,存在一个方便的转换器,可以通过编写类似以下内容的方法从其他集合转换为Scala的数据结构: 这是一个可爱的小功能,因为它允许与现有Java代码进行交互时利用Scala的优势。 但是,我不确定所涉及的时间和空间复杂性,并且在官方文档中找不到任何内容,因此存在以下问题: 在哪里可以获得有关JavaConverters的复杂性(时间和空间)的信息? 问题答案: 各
下面是我写的一些伪代码,给定一个数组A和一个整数值k,如果与k之和中有两个不同的整数,则返回true,否则返回false。我正试图确定这个算法的时间复杂度。 我猜这个算法在最坏的情况下的复杂度是O(n^2)。这是因为第一个for循环运行n次,该循环内的for循环也运行n次。if语句进行一次比较,如果为true,则返回一个值,这两个操作都是常量时间操作。最后的return语句也是一个常数时间操作。
本文向大家介绍k-means算法的时间空间复杂度?相关面试题,主要包含被问及k-means算法的时间空间复杂度?时的应答技巧和注意事项,需要的朋友参考一下 时间复杂度为O(tmnK) t表示迭代次数,m表示数据个数,表示数据特征维度,K表示类簇数 空间复杂度为O((m+K)*n) m表示数据个数,K表示类簇个数,n表示维度,理解就是需要存储数据点和类中心点
有人能帮我了解一下这个代码片段的时间和空间复杂性吗?请参考leetcode问题-单词中断II。给定一个非空字符串s和一个包含非空单词列表的字典单词dict,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。返回所有这些可能的句子。