每日编码问题 #1 问题 #1 我的解决方案 解释 DailyCodingProblem

2025-06-08

每日编码问题 #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;
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

解释

最简单的解决方案是执行两个嵌套的 for 循环,并检查是否有任何组合可以达到k我们想要的 。
但因为我想要奖励标签,经过一番思考后,我意识到可以对输入数组进行 foreach 循环,并针对每个元素检查它与 之间的差值k。找到差值后,你可以检查之前是否见过这个数字,并且HashSet数据结构允许进行持续查找(因为它是一个哈希表)。

我会尝试每天解决日常问题,但有时生活会阻碍我:)
解决方案发布在我的 github 帐户中




如果我应该继续发布我的解决方案,请随意点赞并在评论中告诉我。

如果您还有更好的解决方案,请务必分享,以便我们互相学习。

鏂囩珷鏉ユ簮锛�https://dev.to/cwetanow/daily-coding-problem-1-23e0
PREV
Kubernetes 设置快速运行
NEXT
使用 Python 和 Fauna 构建电子商务电报机器人。