Skip to content

feat: add TS solution to lc problem No.1293 #2970

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
May 31, 2024

Conversation

rain84
Copy link
Contributor

@rain84 rain84 commented May 30, 2024

No description provided.

@idoocs
Copy link
Member

idoocs commented May 30, 2024

🤭 感谢你的提交,请检查你的改动是否符合以下项目规范。

1. 格式化

我们项目中各种编程语言代码(包括文档)所采用的格式化工具不同,提交 pr 之前必须确保代码、文档正确格式化。

  • .{md,js,ts,php,sql,rs} 采用 prettier
  • .{c,cpp,java} 采用 clang-format
  • .{py} 采用 black
  • .{go} 采用 gofmt
  • 其它待完善

2. Git 提交信息

我们项目遵循 AngularJS Git Commit Message Conventions 规范,我们希望你的提交信息尽可能与项目保持一致。

  • 新增或修改题解:feat: add/update solution(s) to lc problem(s): No.xxxx
  • 修复错误:fix: xxxx
  • 日常维护:chore: xxx

3. 其它补充

新增题解及代码时,需要创建 Solution.xxx 源代码文件(如果已存在,请确认算法是否更优,是则覆盖已有算法代码),同时,需要在 README.md 以及 README_EN.md 中添加对应的代码片段(英文文件中不要出现中文注释)
另外,编码风格(比如变量、函数的命名),尽量跟项目已有代码保持一致。


🤭 Thank you for your contribution. Please check if your changes comply with the following project specifications.

1. Formatting

We use different formatting tools for various programming languages (including documentation) in our project. You must ensure that the code and documentation are correctly formatted before submitting a pr.

  • .{md,js,ts,php,sql,rs} use prettier
  • .{c,cpp,java} use clang-format
  • .{py} use black
  • .{go} use gofmt
  • Others to be improved

2. Git Commit Message

Our project follows the AngularJS Git Commit Message Conventions. We hope that your submission information is as consistent as possible with the project.

  • Add or modify solutions: feat: add/update solution(s) to lc problem(s): No.xxxx
  • Fix errors: fix: xxxx
  • Routine maintenance: chore: xxx

3. Other notes

When adding solutions and code, you need to create a Solution.xxx source code file (if it already exists, please confirm whether the algorithm is better, if yes, overwrite the existing algorithm code), and at the same time, you need to add the corresponding code snippets in README.md and README_EN.md (do not have Chinese comments in the English file)
In addition, the coding style (such as the naming of variables and functions) should be as consistent as possible with the existing code in the project.

@idoocs idoocs added md Issues or Pull requests relate to .md files ts Issues or Pull requests relate to .ts code labels May 30, 2024
@yanglbme
Copy link
Member

Hi @rain84 Here are a few suggestions:

  1. Define m and n according to the description given in the problem, i.e., m = grid.length and n = grid[0].length. Our existing solution also defines them this way.
  2. When using breadth-first search (BFS), we usually mark the node as visited in the vis array when we put it into the queue. This can prevent revisiting nodes that have already been added to the queue.
  3. If a nextQ queue is defined, you only need to iterate through the original queue q without popping elements from q one by one.

yanglbme added 4 commits May 31, 2024 08:34

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
@yanglbme yanglbme merged commit 2f0b177 into doocs:main May 31, 2024
4 checks passed
@rain84 rain84 deleted the feature/lc-1293 branch May 31, 2024 09:39
@rain84
Copy link
Contributor Author

rain84 commented May 31, 2024

@yanglbme Hi, friend!

Thanks for the helpful advises!
They help me become better

  1. When using breadth-first search (BFS), we usually mark the node as visited in the vis array when we put it into the queue. This can prevent revisiting nodes that have already been added to the queue.

I am going through the LeetCode's crash course in DSA. And it uses the naming 'seen' instead of 'vis'. Tthat is why there is no need to abbreviate original word. How do you think, may be this approach is better?

@rain84
Copy link
Contributor Author

rain84 commented May 31, 2024

Also I tried to define vis as a 3D-array ([n][m][k]), and there was no advantages between Set and string-hash.

  1. With 3D array
image
  1. With hash-Set
image

@yanglbme , what do you think about this?

@yanglbme
Copy link
Member

@rain84

Hello, in this problem, storing the visited nodes in a hash table or a 3D array both result in a complexity of O ( m × n × k ) , with no difference in this regard. Based on my evaluations on the LeetCode Chinese site, the execution time is around 90ms.

image

If we use a hash table with strings, each time before enqueuing, we need to convert the node into a string and check if the string is in the hash table. This approach might not be as concise as using v i s [ x ] [ y ] [ k ] .

@rain84
Copy link
Contributor Author

rain84 commented May 31, 2024

@yanglbme

Thanks for nice explanation
I tested your solution on LeetCode and made shure there is no significant difference with mine.
I decided to keep solution with hash-sets, after some cosmetic changes (thank you for a good examples with your code!) it looks cleaner for me. But it is only my own IMHO )
If you are interested you can view it here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
md Issues or Pull requests relate to .md files ts Issues or Pull requests relate to .ts code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants