<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>line Archives - Huahua&#039;s Tech Road</title>
	<atom:link href="https://zxi.mytechroad.com/blog/tag/line/feed/" rel="self" type="application/rss+xml" />
	<link>https://zxi.mytechroad.com/blog/tag/line/</link>
	<description></description>
	<lastBuildDate>Mon, 03 Sep 2018 17:11:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.8</generator>

<image>
	<url>https://zxi.mytechroad.com/blog/wp-content/uploads/2017/09/cropped-photo-32x32.jpg</url>
	<title>line Archives - Huahua&#039;s Tech Road</title>
	<link>https://zxi.mytechroad.com/blog/tag/line/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>花花酱 LeetCode 149. Max Points on a Line</title>
		<link>https://zxi.mytechroad.com/blog/geometry/leetcode-149-max-points-on-a-line/</link>
					<comments>https://zxi.mytechroad.com/blog/geometry/leetcode-149-max-points-on-a-line/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Fri, 20 Oct 2017 05:05:56 +0000</pubDate>
				<category><![CDATA[Geometry]]></category>
		<category><![CDATA[Hard]]></category>
		<category><![CDATA[hard]]></category>
		<category><![CDATA[line]]></category>
		<category><![CDATA[point]]></category>
		<guid isPermaLink="false">http://zxi.mytechroad.com/blog/?p=643</guid>

					<description><![CDATA[<p>Problem: Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. Idea: count by slope Time complexity:&#8230;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/geometry/leetcode-149-max-points-on-a-line/">花花酱 LeetCode 149. Max Points on a Line</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><iframe width="500" height="375" src="https://www.youtube.com/embed/7FPL7nAi9aM?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe></p>
<p><strong>Problem:</strong></p>
<div class="question-description">
<p>Given <i>n</i> points on a 2D plane, find the maximum number of points that lie on the same straight line.</p>
</div>
<p><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><br />
<ins class="adsbygoogle" style="display: block; text-align: center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-2404451723245401" data-ad-slot="7983117522"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>
<p><strong>Idea:</strong></p>
<p><a href="http://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/149-ep92.png"><img class="alignnone size-full wp-image-647" src="http://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/149-ep92.png" alt="" width="960" height="540" srcset="https://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/149-ep92.png 960w, https://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/149-ep92-300x169.png 300w, https://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/149-ep92-768x432.png 768w, https://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/149-ep92-624x351.png 624w" sizes="(max-width: 960px) 100vw, 960px" /></a></p>
<p>count by slope</p>
<p>Time complexity: O(n^2)</p>
<p>Space complexity: O(n)</p>
<h1><strong>Solution:</strong></h1>
<p><div class="responsive-tabs">
<h2 class="tabtitle">C++ / pair</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">// Author: Huahua
// Running time: 6 ms
class Solution {
public:
    int maxPoints(vector&lt;Point&gt;&amp; points) {
        int n = points.size();        
        int ans = 0;
        for (int i = 0; i &lt; n; ++i) {
            std::map&lt;std::pair&lt;int,int&gt;, int&gt; count;
            int same_points = 1;
            int max_points = 0;
            for (int j = i + 1; j &lt; n; ++j) {
                const Point&amp; p1 = points[i];
                const Point&amp; p2 = points[j];
                if (p1.x == p2.x &amp;&amp; p1.y == p2.y)
                    ++same_points;
                else
                    max_points = max(max_points, ++count[getSlope(p1, p2)]);
            }
            ans = max(ans, same_points + max_points);             
        }
        return ans;
    }
private:
    // slope dy/dx : &lt;dy, dx&gt;
    std::pair&lt;int, int&gt; getSlope(const Point&amp; p1, const Point&amp; p2) {
        const int dx = p2.x - p1.x;
        const int dy = p2.y - p1.y;
        
        // horizontal line
        if (dy == 0) return { p1.y, 0 };
        // vertical line
        if (dx == 0) return { 0, p1.x };
        
        const int d = gcd(dx, dy);
        return { dy / d, dx / d };
    }
    
    int gcd(int m, int n) {
        return n == 0 ? m : gcd(n, m % n);
    }
};</pre><p></div><h2 class="tabtitle">C++ / long</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">// Author: Huahua
// Running time: 4 ms
class Solution {
public:
  int maxPoints(vector&lt;Point&gt;&amp; points) {
    int n = points.size();        
    int ans = 0;
    for (int i = 0; i &lt; n; ++i) {
      unordered_map&lt;long, int&gt; count;
      int same_points = 1;
      int max_points = 0;
      const Point&amp; p1 = points[i];
      for (int j = i + 1; j &lt; n; ++j) {                
        const Point&amp; p2 = points[j];
        if (p1.x == p2.x &amp;&amp; p1.y == p2.y)
          ++same_points;
        else
          max_points = max(max_points, ++count[getSlope(p1, p2)]);
      }
      ans = max(ans, same_points + max_points);             
    }
    return ans;
  }
private:
  // slope dy/dx : dy &lt;&lt; 32 | dx
  long getSlope(const Point&amp; p1, const Point&amp; p2) {
    const int dx = p2.x - p1.x;
    const int dy = p2.y - p1.y;

    // horizontal line
    if (dy == 0) return static_cast&lt;long&gt;(p1.y) &lt;&lt; 32 | 0;
    // vertical line
    if (dx == 0) return static_cast&lt;long&gt;(0)&lt;&lt; 32 | p1.x;

    const int d = __gcd(dx, dy);
    return static_cast&lt;long&gt;(dy / d) &lt;&lt; 32 | (dx / d);
  }
};</pre><p></div></div></p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/geometry/leetcode-149-max-points-on-a-line/">花花酱 LeetCode 149. Max Points on a Line</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/geometry/leetcode-149-max-points-on-a-line/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
