cs50 复数气味测试。关于如何开发此 void print_winner(void) 函数的最佳实践是什么
cs50 plurality smell test. What's best practice on how to develop this void print_winner(void) function
查看 plurality.c 的分发代码让我相信空白 (void)print_winner(void) 函数可以通过几个循环来解决。但是在实践中使用合并排序来解决这个问题会更好吗?更具体地说,它要求我制作一个新的排序投票总数数组,候选人将最小的投票排序为最大的投票,我只是从数组中打印出最大的投票 getter(s)?
在不给出答案的情况下,有经验的开发人员可以告诉我他们具体使用什么样的逻辑吗?即:你想使用递归吗?这里的最佳做法是什么?为什么?
https://cdn.cs50.net/2020/fall/psets/3/plurality/plurality.c
原谅link。我的帐户还不能嵌入图片,我是这种论坛的新手。
在这种情况下,由于您已经有了一组候选人,因此您只需循环一次即可找到得票最多的候选人。无需创建新数组,只需在 O(n) 时间复杂度的情况下进行。假设 candidate[0] 获得最多选票,如果另一名候选人获得更多选票,则在循环时更新获胜者。您还可以添加检查以查看某人是否拥有相同数量的选票,在这种情况下,您可能需要另一个数组来保存“当前最大”候选人。如果有新的最大值,请更新此值。
查看 plurality.c 的分发代码让我相信空白 (void)print_winner(void) 函数可以通过几个循环来解决。但是在实践中使用合并排序来解决这个问题会更好吗?更具体地说,它要求我制作一个新的排序投票总数数组,候选人将最小的投票排序为最大的投票,我只是从数组中打印出最大的投票 getter(s)?
在不给出答案的情况下,有经验的开发人员可以告诉我他们具体使用什么样的逻辑吗?即:你想使用递归吗?这里的最佳做法是什么?为什么?
https://cdn.cs50.net/2020/fall/psets/3/plurality/plurality.c
原谅link。我的帐户还不能嵌入图片,我是这种论坛的新手。
在这种情况下,由于您已经有了一组候选人,因此您只需循环一次即可找到得票最多的候选人。无需创建新数组,只需在 O(n) 时间复杂度的情况下进行。假设 candidate[0] 获得最多选票,如果另一名候选人获得更多选票,则在循环时更新获胜者。您还可以添加检查以查看某人是否拥有相同数量的选票,在这种情况下,您可能需要另一个数组来保存“当前最大”候选人。如果有新的最大值,请更新此值。