【发布时间】:2018-09-05 10:10:15
【问题描述】:
Leetcode Discussion 中的一种算法使用二叉搜索树来保存输入数组中的一系列值,以检查该数组是否包含最多相差 t 的值,并且它们的索引彼此之间的距离最多为 k。
JAVA:
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
if (nums == null || nums.length == 0 || k <= 0) {
return false;
}
final TreeSet<Integer> values = new TreeSet<>();
for (int ind = 0; ind < nums.length; ind++) {
final Integer floor = values.floor(nums[ind] + t);
final Integer ceil = values.ceiling(nums[ind] - t);
if ((floor != null && floor >= nums[ind])
|| (ceil != null && ceil <= nums[ind])) {
return true;
}
values.add(nums[ind]);
if (ind >= k) {
values.remove(nums[ind - k]);
}
}
return false;
}
我正在努力让它在 C# 中工作。只要LastOrDefault 和FirstOrDefault 方法默认返回0,此代码就不起作用。如何解决以将null 作为默认值?
C#:
public bool ContainsNearbyAlmostDuplicate(int[] nums, int k, int t)
{
if (nums == null || nums.Length < 2 || k < 1) return false;
SortedSet<long> set = new SortedSet<long>();
for (int i = 0; i < nums.Length; i++)
{
long l = (long)nums[i];
long floor = set.LastOrDefault(n => n <= l);
long ceil = set.FirstOrDefault(n => n >= l);
if ((l - floor <= t) || (ceil - l <= t))
return true;
set.Add(l);
if (i >= k) set.Remove((long)nums[i - k]);
}
return false;
}
【问题讨论】:
标签: c# .net binary-search-tree sortedset