这本书充满了有趣的问题,但由于我自己学习,如果我能找到至少一些问题的解决方案,那将是一个很大的帮助.
谁知道这个呢?
我想在C#中对double值进行舍入方法.它需要能够将double值舍入到任何舍入精度值.我手边的代码看起来像:
public static double RoundI(double number, double roundingInterval) {
if (roundingInterval == 0.0)
{
return;
}
double intv = Math.Abs(roundingInterval);
double sign = Math.Sign(number);
double val = Math.Abs(number);
double valIntvRatio = val / intv;
double k = Math.Floor(valIntvRatio);
double m = valIntvRatio - k;
bool mGreaterThanMidPoint = ((m - 0.5) >= 1e-14) ? true : false;
bool mInMidpoint = (Math.Abs(m - 0.5) < 1e-14) ? true : false;
return (mGreaterThanMidPoint || mInMidpoint) ? sign * ((k + 1) * intv) …Run Code Online (Sandbox Code Playgroud) 我在一次采访中遇到了一个有趣的算法问题.我给出了答案,但不确定是否有更好的主意.所以我欢迎大家写一些他/她的想法.
你有一个空集.现在元素逐个放入集合中.我们假设所有元素都是整数,它们是不同的(根据集合的定义,我们不考虑具有相同值的两个元素).
每次将新元素添加到集合中时,都会询问集合的中值.中值定义与数学中的相同:排序列表中的中间元素.这里,特别地,当集合的大小是偶数时,假设set = 2*x的大小,中值元素是集合的第x个元素.
一个例子:从空集开始,当添加12时,中位数为12,当添加7时,中位数为7,当添加8时,中位数为8,当添加11时,中位数为8,当添加5,中位数为8,当加16时,中位数为8,...
请注意,首先,元素被添加到逐个设置,其次,我们不知道要添加的元素.
我的答案.
由于这是一个关于寻找中位数的问题,因此需要进行排序.最简单的解决方案是使用普通数组并保持数组排序.当新元素到来时,使用二进制搜索来查找元素的位置(log_n)并将元素添加到数组中.由于它是一个普通的数组,因此需要移动阵列的其余部分,其时间复杂度为n.插入元素后,我们可以使用实例时间立即获得中位数.
最糟糕的时间复杂度是:log_n + n + 1.
另一种解决方案是使用链接列表.使用链接列表的原因是消除了移动阵列的需要.但是找到新元素的位置需要线性搜索.添加元素需要立即时间,然后我们需要通过遍历数组的一半来找到中值,这总是需要n/2次.
最差时间复杂度为:n + 1 + n/2.
第三种解决方案是使用二叉搜索树.使用树,我们避免移动数组.但是使用二叉搜索树来查找中位数并不是很有吸引力.所以我改变二叉搜索树的方式总是左子树和右子树是平衡的.这意味着在任何时候,左子树和右子树都具有相同数量的节点,或者右子树比左子树中的节点多一个节点.换句话说,确保在任何时候,根元素是中值.当然,这需要改变树的构建方式.技术细节类似于旋转红黑树.
如果树被正确维护,则确保WORST时间复杂度为O(n).
因此,这三种算法都与集合的大小成线性关系.如果不存在子线性算法,则可以将这三种算法视为最优解.由于它们彼此之间没有太大区别,因此最好的是使用链接列表最容易实现,这是第二个.
所以我真的很想知道,这个问题是否会有一个亚线性算法,如果是这样的话会是什么样的.有什么想法吗?
史蒂夫.
我有一个大型的Amazon Web Service EC2虚拟服务器.现在我想把它降级为小型.我想保留硬盘信息,但只需下载服务器的配置.主要原因是节省了一些钱.我怎样才能做到这一点?
我想我应该:
我不确定这是否是降级的正确方法,或者他们有正式的方法来做到这一点.我试图从文档中查找,但找不到任何有用的东西.我想这里有人必须能够帮助我.非常感谢你.
嗨,我是String的新手,正在阅读Martin Fowler撰写的文章:http://martinfowler.com/articles/injection.html
他举了一个MovieLister的例子,使用MovieFinder来寻找电影.在这个例子中,他首先提供了代码:
class MovieLister...
private MovieFinder finder;
public MovieLister() {
finder = new ColonDelimitedMovieFinder("movies1.txt");
}
}
Run Code Online (Sandbox Code Playgroud)
他指出,除非你的朋友使用相同的MovieFinder实现并将电影放在同一个txt文件中,否则你不能将MovieLister给你的朋友重复使用.
是的,当然,这不是你编写组件的方式,希望有人可以重用它.相反,随着他的进步,你应该写:
class MovieLister...
public MovieLister(MovieFinder finder) {
this.finder = finder;
}
}
Run Code Online (Sandbox Code Playgroud)
是的,那更好.现在你的朋友可以接管你的MovieLister并插入他自己的代码.对我来说,故事是完整的.我想念你为什么需要一个Spring框架来注入依赖项.依赖关系由朋友的代码注入MovieLister.完全停止.所有Spring设置等同于简单地实现MovieFinder接口并进行这样的调用:
MovieFinder myMovieFinder = new MyMovieFinderImpl();
MovieLister myMovieLister = new MovieLister(myMovieFinder);
Run Code Online (Sandbox Code Playgroud)
简单,容易.我知道你在代码中硬编码MyMovieFinderImpl实例的创建.但是将这一点转移到XML上又有什么意义呢?程序员是否因为害怕编译代码而更喜欢更改XML而不编译以完成所有工作?对不起,我想我只是错过了这一点.几十年前,每个程序都使用依赖注入.但是在过去,依赖是由程序使用库,DOS命令行或GUI注入的.为什么现在我们需要另一种方式来注入依赖?
谢谢.
更新:
好吧,你们很多人带来了注释.在我对Spring的理解中,我可能会更习惯使用XML而不是注释.至少有一个中心位置,以更容易理解的方式列出依赖关系.有了注释,没有这样的中心位置.相反,只是魔术发生.想知道传入的参数是什么?自己去弄清楚,祝你好运.是的,我知道有智能IDE插件可以帮助导航代码.但是,为什么我们首先让一件事变得复杂,并庆祝另一件让我们的生活更轻松的事情呢?事实上,注释使代码更难以浏览和理解,因此人们为此创建IDE插件是显而易见的,我们可能首先创建不必要的东西,不是吗?
我有一个单元测试用例,它涉及创建一些包含随机内容的文件,然后使用这些文件进行测试并清理,删除文件.
所以我需要在@Before方法中创建文件并写入文件.我该如何处理异常?
我有一个C#项目A,它使用.net包装器DLL和本机DLL.我将.net包装器DLL添加到项目A的引用列表中.由于包装器DLL仅在本机DLL处于同一文件夹时使用,因此应将本机DLL复制到项目A的输出目录中.我实现了这一点通过将本机DLL添加为项目A下的内容文件,并将其复制操作设置为在较新时复制.这可以.
如果一个C#项目B具有直接的参考项目A,VS将复制使用项目A到B项目的输出目录这意味着包装DLL和本地DLL将被复制到B项目的输出目录,以及所有相关文件.这也很好.
然后我还有另一个C#项目C,它只直接引用项目B,而不是项目A.有趣的是,VS不会将本机DLL复制到项目C的输出目录,否则我打算这样做当项目C使用项目B的功能并查找本机DLL以使用包装器DLL时,它将找不到它.
有人可以解释为什么VS不将本机DLL复制到项目C的输出目录中?在VS中复制依赖链的文件的机制是什么?非常感谢.
这是winforms的.net问题,而不是asp.net.
我有一个带有几个标签的窗体.我在加载表单时设置所有控件的数据绑定.但我注意到第二个选项卡上的控件的数据绑定不起作用.这些绑定仅在加载表单和选择第二个选项卡时起作用.这给我带来了怀疑:数据绑定仅在绑定控件可见时才起作用.
任何人都可以告诉我这是否属实?测试这个并不难,但我想知道一些确认.
谢谢
可能重复:
将任何对象转换为java中的字节数组
我有一个需要缓存的类.缓存API提供缓存的接口byte[].我的类包含一个字段List<Author>,Author另一个类在哪里.什么是正确的办法,我把List<Author>到byte[]缓存?并检索byte[]从缓存重建List<Author>?
关于Author类的更多细节:它非常简单,只有两个String字段.一个String领域是可能的null.
这是一个WinForms C#问题.
我有一个从标准DataGridView类继承的自定义DataGridView控件.我想监视每当单元格添加到网格时的情况,在网格中更改单元格值.我不知道该怎么做.
DataBindingCompleted事件在单元格/行/列级别无能为力.CellValueChanged事件本身令人困惑,因为它仅在用户修改UI中的值时触发,如果从基础数据源更新值,则无助.听什么是正确的事件?
我知道DataGridViewCell类有一个ValueChanging事件.但是在自定义的DataGridView中,如何将我的事件监听器挂钩到每个单元?
谢谢您的帮助.