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; }
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); } } }