Description

Solution

    class Solution {
    public:
        int numPairsDivisibleBy60(vector<int>& time) {
            std:unordered_map<int, int> hm;
            int ans =0;
            for(auto t: time) {
                t %= 60;
                if( t == 0 ){
                    ans+= hm[t];
                }else{
                    ans+= hm[60-t];
                }
                hm[t] ++;
            }
            return ans;
        }
    }

Conclusion

  • hashtable
  • 今后遇到一次一次过不去的情况下就换方法吧,不要太钻牛角尖了。
  • 总是喜欢用模拟的思路去解题,源自于自己乱七八糟的解题方法,但是这种方法需要考虑的情况实在是太多了,就像是一个地狱,永远没有尽头。
    • 就像是这道题,最后一次我已经避免掉了溢出的可能,但是还是不知道少考虑了哪种情况,不知道要从哪里去下手:
        class Solution {
          public:
          int numPairsDivisibleBy60(vector<int>& time) {
            std:unordered_map<int, int> hm;
            int len = time.size();
            int ans = 0;
            for(int i=0; i<len; i++ ){
              time[i]%=60;
              hm[time[i]] ++;
              cout<<time[i]<<", ";
            }
            cout<<endl;
            bool flag[61] = {false};
            for (auto iter = hm.begin(); iter != hm.end(); ++iter) {
              if(flag [60 - iter->first] == false){
                unsigned long long int sum;
                if(iter->first * 2 == 60 || iter->first == 0) {
                  // 阶乘/2
                  sum=1;
                  for(int i=1; i <= hm[iter->first]; i++){
                    sum *= i;
                  }
                  if(iter->first != 0 || sum != 1){
                    sum /= 2 ;
                  }
                }else{
                  sum = hm[60 - iter->first] * hm[iter->first];
                }
                ans += sum;
                flag [60 - iter->first] = true;
                flag [iter->first] = true;
              }
            }
            return ans;
          }
        };
- 迭代器的做法更是如此了,在内存循环把迭代器的某个未来元素删除之后,父级的迭代器就坏了,所以会报内存错误。
  - [C++ STL unordered_map删除元素:erase()和clear() (biancheng.net)](http://c.biancheng.net/view/7247.html)
    bool mark[100] = { true }
- 我不知道把这个语句放在全局和主函数里执行结果一不一样,我觉得应该不一样,但默认是 False 的,习惯上我也一直这么定义,所以总是漏掉了这种情况。