') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Data structures/arrays/triplet sum by Skyad · Pull Request #11134 · TheAlgorithms/Python · GitHub
Skip to content

Data structures/arrays/triplet sum - #11134

Merged
cclauss merged 11 commits into
TheAlgorithms:masterfrom
Skyad:data_structures/arrays/triplet_sum
Nov 6, 2023
Merged

Data structures/arrays/triplet sum#11134
cclauss merged 11 commits into
TheAlgorithms:masterfrom
Skyad:data_structures/arrays/triplet_sum

Conversation

@Skyad

@SkyadSkyad commented Nov 1, 2023

Copy link
Copy Markdown
Contributor

Describe your change:

This contribution includes the hashing approach for finding the triplet sum as 0.

  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Add or change doctests? -- Note: Please avoid changing both code and tests in a single pull request.
  • Documentation change?

Checklist:

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • All new algorithms include at least one URL that points to Wikipedia or another similar explanation.
  • If this pull request resolves one or more open issues then the description above includes the issue number(s) with a closing keyword: "Fixes #ISSUE-NUMBER".

Skyadand others added 4 commits October 21, 2023 22:37
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
Signed-off-by: Sunny Kumar <sunny.kumar09@ad.infosys.com>
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
@algorithms-keeperalgorithms-keeperBot added the tests are failing Do not merge until tests pass label Nov 1, 2023
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
@algorithms-keeperalgorithms-keeperBot removed the tests are failing Do not merge until tests pass label Nov 1, 2023


def find_triplets_with_0_sum(nums: list[int]) -> list[list[int]]:
def find_triplets_with_0_sum(nums: list) -> list:

@cclausscclaussNov 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why?!?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since after updating the code in the existing file, "(nums: list[int]) -> list[list[int]]:" was failing in ruff test.
(ruff find_triplets_with_0_sum.py was throwing error so I changed to ( nums: list) -> list: )

Comment on lines +47 to +48
Time complexity: O(N^2)
Auxiliary Space: O(N)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do we prove these claims?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Time complexity: O(N^2)
--> This approach has two nested for loops, outer loop runs from start till end of the array length and inner loop from start+1 to end, that's why it has N^2 time complexity.
Auxiliary Space: O(N)
--> This method Creates a hashmap to store the elements so n extra space has been used.

output_arr = []

# Set the initial element as arr[i].
for i in range(len(arr) - 2):

@cclausscclaussNov 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
foriinrange(len(arr) -2):
fori, iteminenumerate(arr[:-2]):

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated as suggested.

current_sum = target_sum - arr[i]

# Traverse the subarray arr[i+1:].
for j in range(i + 1, len(arr)):

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
forjinrange(i+1, len(arr)):
forother_iteminarr[i+1:]:

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated as suggested.

@cclausscclauss left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's not use less specific type hints.

@algorithms-keeperalgorithms-keeperBot added the awaiting changes A maintainer has requested changes to this PR label Nov 5, 2023
Sunny Kumar added 2 commits November 6, 2023 15:44
Signed-off-by: Sunny Kumar <sunny.kumar09@ad.infosys.com>
@algorithms-keeperalgorithms-keeperBot added awaiting reviews This PR is ready to be reviewed and removed awaiting changes A maintainer has requested changes to this PR labels Nov 6, 2023
@algorithms-keeperalgorithms-keeperBot added the tests are failing Do not merge until tests pass label Nov 6, 2023
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
@algorithms-keeperalgorithms-keeperBot removed the tests are failing Do not merge until tests pass label Nov 6, 2023
@cclauss
cclauss enabled auto-merge (squash) November 6, 2023 12:09

@cclausscclauss left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I put the more explicit type hints back in place.

@Skyad

Skyad commented Nov 8, 2023

Copy link
Copy Markdown
ContributorAuthor

Thanks !! Christian Clauss for reviewing and accepting my code contribution.

cclauss added a commit to cclauss/Python that referenced this pull request Jan 13, 2024
* updated code for find triplets with 0 sum
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
* extra line added at the end of file
Signed-off-by: Sunny Kumar <sunny.kumar09@ad.infosys.com>
* extra line added at the end of file
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* file updated with comments
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
* updated the comments as suggested by community
Signed-off-by: Sunny Kumar <sunny.kumar09@ad.infosys.com>
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* file updated according to community comments
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
* Update find_triplets_with_0_sum.py
---------
Signed-off-by: Skyad <777.sunnykumar@gmail.com>
Signed-off-by: Sunny Kumar <sunny.kumar09@ad.infosys.com>
Co-authored-by: Sunny Kumar <sunny.kumar09@ad.infosys.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Christian Clauss <cclauss@me.com>
@isidroasisidroas mentioned this pull request Jan 25, 2025
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Skyad@cclauss