日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

c# 两个list比较_C#刷遍Leetcode面试题系列连载(1) 入门与工具简介(VS Code amp; VS)...

發(fā)布時(shí)間:2025/3/20 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# 两个list比较_C#刷遍Leetcode面试题系列连载(1) 入门与工具简介(VS Code amp; VS)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么要刷LeetCode

大家都知道,很多對(duì)算法要求高一點(diǎn)的軟件公司,比如美國(guó)的FLAGM (Facebook、LinkedIn、Amazon/Apple、Google、Microsoft),或國(guó)內(nèi)大廠BAT、TMD、華為,以及國(guó)內(nèi)新興的 AI 公司等等,都對(duì)算法水平有所要求。據(jù)悉知名游戲公司的算法崗收入很高,相應(yīng)的對(duì)算法要求也比較高。而這些公司,大多數(shù)會(huì)以 LeetCode 中的題目或基于 LeetCode 改進(jìn)后的自家算法題庫來考察候選人。

于是想進(jìn)入上述大廠,定期做 LeetCode 題目很有必要。即使沒打算進(jìn)這些大廠,堅(jiān)持做LeetCode,個(gè)人的算法水平、編程能力也會(huì)有較大提升。本文主要介紹 .NET 開發(fā)者如何入手刷 LeetCode 面試題。

刷LeetCode有哪些好處?

  • 提升抽象思維水平

計(jì)算機(jī)中有很多抽象的數(shù)據(jù)結(jié)構(gòu),比如: List、Stack(棧)、Linked List(鏈表)、Hash Table(哈希表)、Heap(堆)、Tree等等,而LeetCode 上的大量高質(zhì)量算法題基本上涵蓋了所有這些數(shù)據(jù)結(jié)構(gòu)的應(yīng)用。怎么將這些題抽象成數(shù)學(xué)模型,轉(zhuǎn)化為具體數(shù)據(jù)結(jié)構(gòu)的應(yīng)用,則是我們需要提升的地方,而這恰恰幫我們極大地提升了自己的抽象思維水平。

  • 時(shí)刻對(duì)時(shí)間、空間復(fù)雜度有所掌控

每一個(gè)算法實(shí)現(xiàn)都有其相應(yīng)的時(shí)間復(fù)雜度和空間復(fù)雜度,而 LeetCode中的一些題對(duì)時(shí)間復(fù)雜度有明確要求,有的要求O(n)即可,有的則要求O(1)才行,否則代碼無法 AC(Accepted)。

  • 對(duì)各個(gè)語言有更深的理解

比如你上學(xué)時(shí)用 C++ 刷一遍,工作后再用 C# 刷一遍,最后再用 Python 刷一遍,那么你對(duì)各個(gè)語言的代碼量和性能都會(huì)有更深地體會(huì),也會(huì)知道用哪一種語言具體該怎么寫出更簡(jiǎn)短、更優(yōu)雅的代碼。

LeetCode vs 傳統(tǒng)的 OJ

中學(xué)有NOI信息競(jìng)賽,大學(xué)有ACM算法競(jìng)賽,按理說應(yīng)該都有各自的 OJ,這兩類 OJ 不是業(yè)內(nèi)公司的真實(shí)面試題。NOI了解的不是特別多,據(jù)說以前用 Pascal 語言解題。相應(yīng)地,我知道有個(gè)中學(xué)生比較多的 OJ 叫洛谷(https://www.luogu.org/)。而ACM有不少免費(fèi) OJ,國(guó)內(nèi)就有一些ACM OJ,比如POJ(北大的)、HDU OJ(杭電的)、ZOJ(浙大的)、HUST OJ(華科的)。另外,還有些職場(chǎng)用的OJ,比如牛客網(wǎng)OJ、浙江大學(xué)計(jì)算機(jī)程序設(shè)計(jì)能力考試 PTA(拼題A,原全稱為Programming Ability Test,簡(jiǎn)稱PAT) 等等。

而國(guó)外有 UVAoj http://uva.onlinejudge.org/,

TopCoder (http://www.topcoder.com/tc)等等,另外還記得微軟的校招筆試用的 OJ 是 hihoCoder http://hihocoder.com/。

而 LeetCode 較上述 OJ 而言有如下優(yōu)勢(shì):

  • 題基本上都來自于業(yè)內(nèi)大公司的真實(shí)面試題

  • 題目不是競(jìng)賽性質(zhì),難度也適中

  • 支持多種主流編程語言C++/C/C#/Python/Java/js/Ruby/PHP/Kotlin等

  • 不用處理輸入輸出問題,可以集中精力解決具體問題

  • 提供Discuss環(huán)境,可參考他人代碼

  • 提供?執(zhí)行用時(shí)分布圖表,可看到自己提交的代碼在所有已AC代碼中的運(yùn)行效率排名

傳統(tǒng)的 OJ 對(duì)用戶代碼的判定狀態(tài)有如下幾種:

1、Accepted. ——通過!(AC)

2、Wrong Answer.——答案錯(cuò)。(WA)

3、RunTime Error.——程序運(yùn)行出錯(cuò),意外終止等。(RTE)

4、Time Limit Exceeded. ——超時(shí)。程序沒在規(guī)定時(shí)間內(nèi)出答案。(TLE)

5、Presentation Error. ——格式錯(cuò)。程序沒按規(guī)定的格式輸出答案。(PE)

6、Memory Limit Exceeded. ——超內(nèi)存。程序沒在規(guī)定空間內(nèi)出答案。(MLE)

7、Compile Error. ——編譯錯(cuò)。程序編譯不過。(CE)

而在 LeetCode 中,應(yīng)該是沒有第5種狀態(tài)的。

刷 OJ 時(shí),大家還會(huì)常用兩個(gè)詞:

  • AK(ALL KILL),把比賽中所有題都做出來了,出題方需要考慮 防AK策略。

  • 1Y: 第一次提交就正確了,也就是大家常說的“一遍過“

刷題時(shí)大家的一致感覺是: AC一時(shí)爽,一直AC一直爽!

LeetCode刷題時(shí)的心態(tài)建設(shè)

在本文開頭,我們提到了很多行內(nèi)名廠需要考察與 LeetCode 難度難度相當(dāng)?shù)乃惴}。但需要注意的是,面試時(shí)很可能面試官會(huì)對(duì)題目的解題要求進(jìn)行另外的調(diào)整,比如要求更低的時(shí)間復(fù)雜度、更低的空間復(fù)雜度之類的,所以呢,面試算法題很重要的是要和面試官保持即時(shí)的溝通,而不是一上來就埋頭寫代碼。

有的人刷 LeetCode 中 難度為 Easy 和 Medium 的題3遍左右后成功拿到微軟Offer,還是Special Offer!也有人刷完LeetCode很多遍,也沒能拿到大廠Offer呢。

更多算法題面試要點(diǎn)請(qǐng)參看一畝三分地論壇站長(zhǎng)Warald 的文章 Leetcode刷題五遍還沒offer!舉例分析為什么找工作光刷題不夠 .

C#如何刷遍L(zhǎng)eetCode

在 LeetCode 中提交 C# 代碼有兩種主流方式,下面以 LeetCode 中的136號(hào)題為例來說明。

該題的中文版網(wǎng)址為: https://leetcode-cn.com/problems/single-number/,將代碼語言選為C#,則默認(rèn)的接口代碼如下:

public class Solution {

public int SingleNumber(int[] nums) {

}

}

選項(xiàng)1:VS本地Debug + 在線驗(yàn)證后提交

  • 在本地Visual Studio中創(chuàng)建 .NET Core/Framework 項(xiàng)目

  • 將所生成項(xiàng)目中的?Program.cs中?class Program改為?public class Solution

  • 接下來把相應(yīng)的代碼放在類 Solution 里面

如果需要本地測(cè)試,只需在該類里面加入 主函數(shù)即可,然后在 主函數(shù)中調(diào)用相應(yīng)的函數(shù),debug,觀察調(diào)用時(shí)的各項(xiàng)值。

使用LeetCode的"執(zhí)行代碼"案例可以測(cè)試當(dāng)前的測(cè)試用例,而界面上的"測(cè)試用例"可以自行修改。

如果此時(shí)對(duì)代碼比較有信心,可以直接點(diǎn)"Test"按鈕左側(cè)的"Submit"按鈕提交代碼了。

如果不幸,部分Test case無法通過,則可進(jìn)行本地debug,下面是我給出的樣例代碼:

using System;

using System.Collections.Generic;

using System.Linq;

namespace leetcoce136

{

public class Solution

{

public int SingleNumber(int[] nums)

{

int res = 0;

Dictionary<int, int> dict = new Dictionary<int, int>();

foreach (var num in nums)

{

if (!dict.ContainsKey(num))

{

dict.Add(num, 1);

}

else

dict[num]++;

}

res = dict.FirstOrDefault(kv => kv.Value == 1).Key;

return res;

}

public static void Main()

{

var sol = new Solution();

int[] input = { 4, 1, 2, 1, 2 };

System.Console.WriteLine(sol.SingleNumber(input));

}

}

}

選項(xiàng)2:VS Code本地Debug + 在LeetCode插件中驗(yàn)證和提交

安裝C#相關(guān)插件

首先微軟官方 OmniSharp 團(tuán)隊(duì)開發(fā)的 C# 插件是必須安裝的,

另外再安裝一下第3個(gè)插件,則對(duì)C#代碼基本的智能感知,關(guān)鍵字高亮等功能就可以順利使用了。

配置 .NET Core運(yùn)行環(huán)境

先安裝 .NET Core SDK 3.0,到官網(wǎng) https://dotnet.microsoft.com/download 下載安裝即可。

首先在 VS Code下方的Terminal窗口中依次輸入如下命令:

$ dotnet --version

3.0.100-preview5-011362

$ cd d:/Coding/csLeetcode

$ dotnet new console -o "leetcoce136"

這里假設(shè)你以及有文件夾 d:/Coding/csLeetcode.

在VS Code中Debug C#

這里我們直接使用剛才帶主函數(shù)的本地測(cè)試代碼吧,將代碼先拿過來,然后按 F5,選擇 .NETCore,具體操作見下圖:

在配置文件 launch.json中,我們需要選擇類型的是 .NET:Launch.NETCoreConsoleApp.

launch.json的完整配置過程如下:

接下來我們需要修改其中的屬性值 program:

默認(rèn)的值為:

"program":"${workspaceFolder}/bin/Debug//"

其中的 是指目標(biāo)運(yùn)行環(huán)境,其具體版本可以在上面還原的項(xiàng)目文件 leetcoce136.csproj?中看到:

而我們的項(xiàng)目名,即 project-name是 leetcode136,于是 program的具體值為:

"${workspaceFolder}/bin/Debug/netcoreapp3.0/leetcode136.dll"

安裝 LeetCode 插件

在擴(kuò)展中搜索安裝作者是 ShengChen的 LeetCode插件。

然后點(diǎn)擊左下角的LeetCode Logo進(jìn)行登錄:

推薦選擇 力扣leetcode-cn.com:

在國(guó)內(nèi)使用,網(wǎng)絡(luò)相對(duì)穩(wěn)定。

然后在 LeetCode 插件的配置文檔中將 leetcode.defaultLanguage設(shè)置為 csharp。

其完整操作過程如下:

接下來就可以愉快地使用LeetCode刷題了。

我們?cè)谧髠?cè)題庫列表中選擇 All,找到剛才的例子No.136,雙擊問題標(biāo)題,可以看到問題描述:

如果需要提交代碼,只需點(diǎn)右下角的"Code Now"按鈕。

當(dāng)我們寫完代碼后,可以點(diǎn)擊里面的代碼下方的 Test?按鈕進(jìn)行測(cè)試,這便等價(jià)于網(wǎng)頁版的按鈕"執(zhí)行代碼"。

點(diǎn) Test后有圖中3種選項(xiàng),我一般是使用第一個(gè)。除非部分 Test Case 無法通過,才會(huì)使用第2個(gè)或第3個(gè)選項(xiàng)。

此時(shí)呢,如果對(duì)代碼比較有信心,可以直接點(diǎn)"Test"按鈕左側(cè)的"Submit"按鈕提交代碼了。

關(guān)于VS Code的LeetCode 插件,文章 LeetCode for VS Code: 春招 Offer 收割利器 中有更詳細(xì)的說明。

接下來的 LeetCode面試題系列連載 中每篇文章將會(huì)提供解題思路、算法復(fù)雜度的簡(jiǎn)要分析、已AC代碼、提交的答案排名等,敬請(qǐng)期待。

參考資料:

.NET Core and Visual Studio Code

https://code.visualstudio.com/docs/languages/dotnet

使用VS Code 開發(fā).NET CORE 程序指南

https://www.cnblogs.com/xboo/p/11431222.html

End

作者簡(jiǎn)介:Bravo Yeung,計(jì)算機(jī)碩士,知乎干貨答主(獲73K?贊同,?34K?感謝,?210K?收藏)。曾在國(guó)內(nèi) Top3互聯(lián)網(wǎng)視頻直播公司短暫工作過,后加入一家外企做軟件開發(fā)至今。

你點(diǎn)的每一個(gè)"在看"

我都當(dāng)成了喜歡!

總結(jié)

以上是生活随笔為你收集整理的c# 两个list比较_C#刷遍Leetcode面试题系列连载(1) 入门与工具简介(VS Code amp; VS)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。