Fraction to Recurring Decimal
Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.If the fractional part is repeating, enclose the repeating part in parentheses.
For example,
- Given numerator = 1, denominator = 2, return "0.5".
- Given numerator = 2, denominator = 1, return "2".
- Given numerator = 2, denominator = 3, return "0.(6)".
Map 里面记录是某一个数的开始的index
reference
注意正负号跟溢出,casting long long
27行,先存map,再乘10
class Solution { public: string fractionToDecimal(int numerator, int denominator) { if (numerator == 0) return "0"; string rt = ""; if ((numerator < 0 && denominator > 0) || (numerator > 0 && denominator < 0)) { rt = "-"; } long long dividend = abs((long long)numerator); long long divisor = abs((long long)denominator); rt += to_string(dividend / divisor); dividend %= divisor; if (dividend == 0) return rt; rt += '.'; unordered_map<int,int> mapping; while (dividend != 0) { if (mapping.find(dividend) != mapping.end()) { rt.insert(mapping[dividend],"("); rt += ")"; return rt; } mapping[dividend] = rt.size(); dividend *= 10; rt += to_string(dividend / divisor); dividend %= divisor; } return rt; } };
In Java, updated on Feb-13th-2019
class Solution { public String fractionToDecimal(int numerator, int denominator) { if (numerator == 0) return "0"; StringBuilder sb = new StringBuilder(); if ((numerator < 0 && denominator > 0) || (numerator > 0 && denominator < 0)) { sb.append("-"); } long num = Math.abs((long)numerator); long den = Math.abs((long)denominator); sb.append(num / den); num %= den; if (num == 0) return sb.toString(); sb.append("."); Map<Long, Integer> map = new HashMap<>(); map.put(num, sb.length()); while (num > 0) { num *= 10; sb.append(num / den); num %= den; if (map.containsKey(num)) { sb.insert(map.get(num),"("); sb.append(")"); return sb.toString(); } map.put(num, sb.length()); } return sb.toString(); } }
Majority Element
Given an array of size n, find the majority element. The majority element is the element that appears more than⌊ n/2 ⌋
times.You may assume that the array is non-empty and the majority element always exist in the array.
-----------------------------------------------------
fact: we are given an array with a majority element in it.
每次都丢掉2个不同数,majority最后肯定会被留下来
class Solution { public: int majorityElement(vector<int> &num) { int count = 1; int countElem = num[0]; for (int i = 1; i < num.size(); i++) { if (count == 0) { countElem = num[i]; count++; continue; } if (countElem == num[i]) { count++; }else { count--; } } return countElem; } };
Majority Number II
Given an array of integers, the majority number is the number that occurs more than 1/3 of the size of the array.Find it.
Note
There is only one majority number in the array
Example
-------------------------------------
For [1, 2, 1, 2, 1, 3, 3] return 1
每次都丢掉3个不同的数,最后超过1/3的肯定会被留下来
最后还要重新对留下来的2个数重新计数,因为超1/3的数可能会被过度消耗
举例:1,1,1,1,2,2,3,3,4,4,4
class Solution { public: /** * @param nums: A list of integers * @return: The majority number occurs more than 1/3. */ int majorityNumber(vector<int> nums) { // write your code here int count_1 = 1, count_2 = 0; int cand_1 = nums[0], cand_2; for (int i = 1; i < nums.size(); i++) { if (count_1 == 0 && cand_2 != nums[i]) { count_1 = 1; cand_1 = nums[i]; continue; } if (count_2 == 0 && cand_1 != nums[i]) { count_2 = 1; cand_2 = nums[i]; continue; } if (nums[i] != cand_1 && nums[i] != cand_2) { count_1--; count_2--; } if (nums[i] == cand_1) { count_1++; } if (nums[i] == cand_2) { count_2++; } } count_1 = 0; count_2 = 0; for (int i = 0; i < nums.size(); i++) { if (nums[i] == cand_1) count_1++; if (nums[i] == cand_2) count_2++; } if (count_1 > count_2) { return cand_1; }else { return cand_2; } } };
No comments:
Post a Comment