- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是“破解编码面试”一书中的问题:
一个马戏团正在设计一个塔套路,其中的人站在彼此的塔顶上肩膀。出于实用和审美的原因,每个人都必须比他或她下面的人既矮又轻。给定马戏团中每个人的高度和体重,编写一个方法来计算最大可能人数在这样的一座塔中。
示例:
输入:
(ht, wt): (65, 100) (70, 150) (56, 90) (75, 190) (60, 95) (68, 110)
输出:
最长的塔的长度为 6,从上到下包括:
(56, 90) (60,95) (65,100) (68,110) (70,150) (75,190)
这是书中的解决方案:
“当我们把这个问题的所有毛病都剔除后,我们就可以理解这个问题确实是下面的问题。
我们有一个项目对列表。找到最长的序列,使第一项和第二项都按非递减顺序排列。”
我想到了这个例子:
{1,1}
{3,3} {7,2}
{6,4} {9,9} {8,5}
这里,序列的值不是按非递减顺序排列的,但它仍然是一个有效的塔。而且我找不到一种方法将相同的项目组织到另一个塔中,该塔的项目按非递减顺序排列。我相信没有这样的方法。所以在我看来,解决方案是不正确的。
我错过了什么吗?
提前致谢。
最佳答案
不,您的值不是按非递减顺序排列的。正如@MooseBoys 评论所说,在您的情况下,第三个值的权重大于第二个。 ({3,3} -> {7,2}, 2<3)
问题是最长递增子序列 (LIS) (DP) 的轻微变化。
您可以根据高度对元素进行排序,然后应用找到最长的重量递增子序列。
请在下面找到 java 实现:
class Person implements Comparable<Person> {
int height;
int weight;
public Person(int height, int weight) {
this.height = height;
this.weight = weight;
}
@Override
public String toString() {
return "Person{" +
"height=" + height +
", weight=" + weight +
'}';
}
@Override
public int compareTo(Person p) {
if(this.height>p.height) {
return 1;
} else if(this.height < p.height) {
return -1;
} else {
return 0;
}
}
}
public class CircusTower {
public void calculatePeople(Person[] input) {
int weightArray[] = new int[input.length];
String[] output = new String[input.length];
for (int i=0;i<input.length;i++) {
weightArray[i] = 1;
output[i] = input[i].toString() + "";
}
int maxLength = 0;
for (int i=1;i<input.length;i++) {
for (int j=0;j<i;j++) {
if( weightArray[j]+1>weightArray[i] && input[i].weight>input[j].weight) {
weightArray[i] = weightArray[j] + 1;
output[i] = output[j] + " " + input[i].toString();
if(maxLength<weightArray[i]) {
maxLength = weightArray[i];
}
}
}
}
System.out.println();
for (int i = 0; i < input.length; i++) {
if (weightArray[i] == maxLength) {
System.out.println("Longest Increasing subsequence - " + output[i] + " of length = " + maxLength);
}
}
}
public static void main(String[] args) {
CircusTower ct = new CircusTower();
Person p1 = new Person(65,100);
Person p2 = new Person(70,150);
Person p3 = new Person(56, 90);
Person p4 = new Person(75, 190);
Person p5 = new Person(60, 95);
Person p6 = new Person(68, 110);
Person[] array = new Person[]{p1,p2,p3,p4,p5,p6};
Arrays.sort(array);
ct.calculatePeople(array);
}
}
我正在使用 n square 实现 LIS 问题,您也可以使用 nlogn 中更好的一个。
希望它澄清。
关于 "Circus tower"的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194187/
这是“破解编码面试”一书中的问题: 一个马戏团正在设计一个塔套路,其中的人站在彼此的塔顶上肩膀。出于实用和审美的原因,每个人都必须比他或她下面的人既矮又轻。给定马戏团中每个人的高度和体重,编写一个方法
所以,我只是从 Supervisor 切换到 Circus 来控制 Python 进程。我从命令行将守护进程作为 circusd 启动。显然,这不是我应该做的,但我无法以正确的方式找到任何文档。启示?
想用jest.retryTimes() &为此,我已经安装了 jest-circus 但是在运行测试时得到 jasmine not define error 。 为了达到上述目的,我添加了 testR
我是 GitHub 的新手,困扰我的一件事是: 为什么我在我的帐户上看到这个“马戏团帐篷”,但在其他存储库上却看不到? 最佳答案 实际上这是用户提交消息的一部分 例如 git commit -m 'F
我正在尝试在 CentOS 7 的虚拟主机中使用 Virtualenv、Circus 和 Chaussette 运行 Django,但是当我运行 circusd circus.ini 时我不断收到此错
我使用 Circus 作为 Rails 项目的主管,但在让它与我选择的 Ruby 服务器 Thin 一起工作时遇到了一些奇怪的问题。这是我的circus.ini: [circus] check_del
默认 jest让您轻松访问jasmine全局范围内。但是一旦你切换testRunner至jest-circus , jasmine是未定义的。以下是一个最小的、可重现的示例: babel.config
我是一名优秀的程序员,十分优秀!