好友
阅读权限10
听众
最后登录1970-1-1
|
楼主|
夜雨闻笛
发表于 2024-7-9 10:37
本帖最后由 夜雨闻笛 于 2024-7-9 10:38 编辑
con-walk 发表于 2024-7-9 09:48
[C#] 纯文本查看 复制代码 Dictionary 上限字典 = new(2000) { [1] = 5, [2] = 8, [3] = 9, [4] = 15 };
D ...[/quote]
[mw_shl_code=csharp,true]Dictionary<uint, List<uint>> 倒置字典 = null!;
Dictionary<uint, uint> 上限字典 = new() { { 1, 5 }, { 2, 8 }, { 3, 9 }, { 4, 15 }, { 5, 21 } };
uint 结果;
for (uint i = 1; i <= 21; i++)
{
结果 = 二分找目标(i);
Console.WriteLine($"当前要找的值:{i},找到的结果为:{结果}");
}
//结果预览:
//当前要找的值:1,找到的结果为:0
//当前要找的值:2,找到的结果为:0
//当前要找的值:3,找到的结果为:0
//当前要找的值:4,找到的结果为:0
//当前要找的值:5,找到的结果为:1
//当前要找的值:6,找到的结果为:0
//当前要找的值:7,找到的结果为:0
//当前要找的值:8,找到的结果为:2
//当前要找的值:9,找到的结果为:3
//当前要找的值:10,找到的结果为:0
//当前要找的值:11,找到的结果为:0
//当前要找的值:12,找到的结果为:0
//当前要找的值:13,找到的结果为:0
//当前要找的值:14,找到的结果为:0
//当前要找的值:15,找到的结果为:4
//当前要找的值:16,找到的结果为:0
//当前要找的值:17,找到的结果为:0
//当前要找的值:18,找到的结果为:0
//当前要找的值:19,找到的结果为:0
//当前要找的值:20,找到的结果为:0
//当前要找的值:21,找到的结果为:5
大佬你好,非常感蟹大佬的回复。
不过我在实测您的代码时遇到了一个问题:
本次求值的循环中,只有彩色标记的是求值成功了的,其他都是返回的0。也就是说,您的方法只有在value刚好等于所求目标的时候,才能返回对应的key。
而我需求的效果是:(举例说明)
假定 Dictionary<uint, uint> 上限字典 = new() { { 1, 5 }, { 2, 8 }, { 3, 9 }, { 4, 15 }, { 5, 21 } };
还是按照上面的循环来操作:
当所求目标=21的时候,刚好返回了5,这是正确的。
但我想要的结果是:当所求目标大于key4的值(15)且小于等于key5的值(21)的时候,都要返回5。
也就是说上面循环结果中 16 17 18 19 20的返回结果都是0,但我需要他们都返回5。
同理,10 11 12 13 14 这几个都大于 key3的值(9)且小于等于key4的值(15),那么他们都要返回4。
表达能力有限,大佬您要是不嫌我啰嗦,我换个方式来说:
Dictionary<uint, uint> 上限字典 = new() { { 1, 5 }, { 2, 8 }, { 3, 9 }, { 4, 15 }, { 5, 21 } };
这个字典中,每一组元素代表的含义是:1的上限是5,但只有不超过5的,都返回1。 2的上限是8,只要不超过8的,都返回2。 3的上限是9,只要不超过9的,都返回3……类推,5的上限是21,只要不超过21的,都返回5
不知道您还能否对刚才的代码进行一下改进? |
|