Пример #1
0
 vector<int> majorityElement(vector<int>& nums) {
     int ph1, ph2;
     //majorityIter(nums,0, ph1, ph2, 0, 0);
     int cnt1 = 0, cnt2 = 0;
     for (size_t i = 0; i < nums.size(); ++i)
     {
         int v = nums[i];
         
         if (cnt1 != 0 && v == ph1)
             cnt1 ++;
         else if (cnt2 != 0 && v == ph2)
             cnt2 ++;
         else if (cnt1 == 0)
         {
             ph1 = v;
             cnt1 = 1;
         }
         else if (cnt2 == 0)
         {
             ph2 = v;
             cnt2 = 1;
         }
         else
         {
             cnt1 --;
             cnt2 --;
         }
     }
     vector<int> ans;
     if (cnt1 > 0 && Cnt(nums, ph1) > nums.size() / 3) ans.push_back(ph1);
     if (cnt2 > 0 && Cnt(nums, ph2) > nums.size() / 3) ans.push_back(ph2);
     return ans;
 }
Пример #2
0
static void Line(Coord2d Start,Coord2d End,Pixel col,VideoMode *v)
  {
  register int l;
  Coord2d Delta,Sign;
  int absdx=0, absdy=0;
  Coord2d Cnt(0,0);

  Delta.x = End.x-Start.x;
  Delta.y = End.y-Start.y;

  Sign.x=Sign(Delta.x);
  Sign.y=Sign(Delta.y);
  absdx=Sign.x*Delta.x;
  absdy=Sign.y*Delta.y;
  v->Point(Start,col,v);

  if (absdx>=absdy)
    {
    for (l=0; l<absdx; l++)
      {
      Cnt.y += absdy;
      if (Cnt.y>=absdx)
        {
        Cnt.y-=absdx;
        Start.y += Sign.y;
        }
      Start.x += Sign.x;
      v->Point(Start,col,v);
      }
    }
  else
    {
    for (l=0; l<absdy; l++)
      {
      Cnt.x += absdx;
      if (Cnt.x>=absdy)
        {
        Cnt.x -= absdy;
        Start.x += Sign.x;
        }
      Start.y += Sign.y;
      v->Point (Start,col,v);
      }
    }
  }