此存储库包含每日编码问题任务的解决方案
每日编码问题 #1
问题 #1
我的解决方案
解释
每日编码问题
很长一段时间里,我下班回家后总是觉得时间在浪费。直到几天前,我偶然发现了“每日编码问题”(DCP),并决定尝试一下。
代码是用 C# 编写的。
它是如何工作的?
DCP 的员工每天都会向您发送一个顶级公司提出的问题,供您解决。高级会员还有机会验证您的解决方案。
问题 #1
这个问题是 Google 最近提出的。
给定一个数字列表和一个数字 k,返回列表中是否有两个数字加起来等于 k。
例如,给定 [10, 15, 3, 7] 和 k 为 17,返回 true,因为 10 + 7 等于 17。
奖励:你能一次性完成这个吗?
我的解决方案
using System;
using System.Collections.Generic;
using System.Linq;
namespace Problem01
{
public class Program
{
public static void Main(string[] args)
{
var numbers = Console.ReadLine()
.Split(' ')
.Select(int.Parse)
.ToList();
var k = int.Parse(Console.ReadLine());
var result = TwoNumbersEqual(numbers, k);
Console.WriteLine(result);
}
public static bool TwoNumbersEqual(List<int> numbers, int k)
{
var set = new HashSet<int>();
foreach (var number in numbers)
{
var remaining = k - number;
if (set.Contains(remaining))
{
return true;
}
set.Add(number);
}
return false;
}
}
}
解释
最简单的解决方案是执行两个嵌套的 for 循环,并检查是否有任何组合可以达到k
我们想要的 。
但因为我想要奖励标签,经过一番思考后,我意识到可以对输入数组进行 foreach 循环,并针对每个元素检查它与 之间的差值k
。找到差值后,你可以检查之前是否见过这个数字,并且HashSet
数据结构允许进行持续查找(因为它是一个哈希表)。
我会尝试每天解决日常问题,但有时生活会阻碍我:)
解决方案发布在我的 github 帐户中
。
如果我应该继续发布我的解决方案,请随意点赞并在评论中告诉我。
如果您还有更好的解决方案,请务必分享,以便我们互相学习。
鏂囩珷鏉ユ簮锛�https://dev.to/cwetanow/daily-coding-problem-1-23e0