Skip to content

feat: add solutions to lc problem: No.0198 #3249

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 27 commits into from
Jul 11, 2024
Merged

Conversation

rain84
Copy link
Contributor

@rain84 rain84 commented Jul 10, 2024

No description provided.

@idoocs
Copy link
Member

idoocs commented Jul 10, 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 js Issues or Pull requests relate to .js code md Issues or Pull requests relate to .md files ts Issues or Pull requests relate to .ts code labels Jul 10, 2024
@rain84 rain84 changed the title feat: add js solution to lc problem: No.0198 feat: add js/ts solutions to lc problem: No.0198 Jul 10, 2024
@yanglbme
Copy link
Member

@rain84

Hello, the third method you provided is actually a problem-solving approach using memoization search.

We should move the third method to the first position, and the original first and second methods should become the second and third methods, respectively. This is because transitioning from memoization search to dynamic programming, and then to space optimization of dynamic programming, is a progressive process.

@yanglbme
Copy link
Member

Here's a more concise and less complex version of the memoized search code:

function rob(nums) {
    const n = nums.length;
    const f = Array(n).fill(-1);
    const dfs = i => {
        if (i >= n) {
            return 0;
        }
        if (f[i] < 0) {
            f[i] = Math.max(nums[i] + dfs(i + 2), dfs(i + 1));
        }
        return f[i];
    };
    return dfs(0);
}

@idoocs idoocs added cpp Issues or Pull requests relate to .cpp code go Issues or Pull requests relate to .go code labels Jul 11, 2024
@idoocs idoocs added the java Issues or Pull requests relate to .java code label Jul 11, 2024
@idoocs idoocs added the py Issues or Pull requests relate to .py code label Jul 11, 2024
@idoocs idoocs added the rs Issues or Pull requests relate to .rs code label Jul 11, 2024
@yanglbme yanglbme changed the title feat: add js/ts solutions to lc problem: No.0198 feat: add solutions to lc problem: No.0198 Jul 11, 2024
@yanglbme yanglbme merged commit 4b80b47 into doocs:main Jul 11, 2024
5 of 6 checks passed
@rain84
Copy link
Contributor Author

rain84 commented Jul 11, 2024

Hello @yanglbme

Here's a more concise and less complex version of the memoized search code:

function rob(nums) {
    const n = nums.length;
    const f = Array(n).fill(-1);
    const dfs = i => {
        if (i >= n) {
            return 0;
        }
        if (f[i] < 0) {
            f[i] = Math.max(nums[i] + dfs(i + 2), dfs(i + 1));
        }
        return f[i];
    };
    return dfs(0);
}

Wow! What an amazing solution!
My current solution looks cumbersome and clunky compared to yours. :)
I always thought that dynamic programming task are solved through recursion and caching.
And I had the appropriate mental model.
Since I started course with DSA on LeetCode, I learned a lot as from the course and during the PS's into this repo ).
So thanks a lot for this opportunity and for your help.

@rain84
Copy link
Contributor Author

rain84 commented Jul 11, 2024

@yanglbme

Why variable for caching named as 'f'?
Could you tell me please?

@rain84 rain84 deleted the feature/lc-0198 branch July 11, 2024 11:33
@yanglbme
Copy link
Member

@rain84

Hello, in our project, it's common practice to use f as the naming convention for many memoization search and dynamic programming codes.

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

Successfully merging this pull request may close these issues.

3 participants