LeetCode: 继续easy题9

Escape The Ghosts

"""
"""
class Solution {
public:
    int distance(vector<int>& s1, vector<int>& s2){
        return abs(s1[0]-s2[0])+abs(s1[1]-s2[1]);
    }
    bool escapeGhosts(vector<vector<int>>& ghosts, vector<int>& target) {
        vector<int> s(2);
        int d = distance(s, target);
        for(vector<int> a:ghosts){
            if(distance(target, a)<=d)
                return false;
        }
        return true;
    }
};

Path Sum III

"""O(n)解法有难度,O(n^2)好想
http://www.cnblogs.com/grandyang/p/6007336.html
"""
class Solution {
public:
    int cal(TreeNode* node, int sum, unordered_map<int,int>& m, int cur){
        if(!node)
            return 0;
        cur += node->val;
        int res = m[cur-sum];//m[sum-node->val];
        m[cur] ++;
        res += cal(node->left, sum, m, cur) + cal(node->right, sum, m, cur);
        m[cur] --;
        return res;
    }
    int pathSum(TreeNode* root, int sum) {
        unordered_map<int,int> m;
        m[0] = 1;
        return cal(root, sum, m, 0);
    }
};

Find All Anagrams in a String

"""用两个hash table,简单,类似计算conv,可以利用邻接关系减少计算量。
"""
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> res;
        if(s.size()<p.size())
            return res;
        unordered_map<char,int> mp;
        unordered_map<char,int> ms;
        for(char c:p)
            mp[c] ++;

        bool ok = true;
        for(int j=0;j<p.size()-1;j++){
                ms[s[j]] ++;
            }
        for(int i=0;i<=s.size()-p.size();i++){
            if(i)
                ms[s[i-1]]--;
            ms[s[i+p.size()-1]] ++;

            for(auto m:mp)
                if(m.second!=ms[m.first])
                    ok = false;
            if(ok)
                res.push_back(i);
            ok = true;
        }

        return res;
    }
};

Arranging Coins

class Solution {
public:
    int arrangeCoins(int n) {
        long num = 1;
        while(1){
            if(num*(num+1)/2>n)
                return num-1;
            num ++;
        }
    }
};

String Compression

"""处理边界
"""
class Solution {
public:
    int compress(vector<char>& chars) {
        char temp = chars[0];
        int num = 0;
        int start = 0; 
        for(int j=0;j<=chars.size();j++){
            char c;
            if (j==chars.size())
                c = '1';
            else
                c = chars[j];
            if(c==temp){
                num ++;
            }
            if(c!=temp){
                chars[start] = temp;
                if(num==1){
                    start ++;
                    temp = c;
                    num = 1;    
                }
                else{
                    string nums = to_string(num);
                    for(int i=0;i<nums.size();i++)
                        chars[start+1+i] = nums[i];
                    start += nums.size()+1;
                    temp = c;
                    num = 1;
                }
            }
        }

        return start;
    }
};

Number of Boomerangs

class Solution {
public:
    int d(pair<int,int>& x, pair<int,int>& y){
        return pow(x.first-y.first,2)+pow(x.second-y.second,2);
    }

    int numberOfBoomerangs(vector<pair<int, int>>& points) {
        int re = 0;

        for(int i=0;i<points.size();i++){
            unordered_map<int, int> map;
            for(int j=0;j<points.size();j++){
                if(j!=i)
                    map[d(points[i],points[j])] ++;
            }

            for(auto m: map)
                re += m.second*(m.second-1);
        }

        return re;
    }
};

Find All Numbers Disappeared in an Array

"""不容易
"""
class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        vector<int> re;
        int tmp;
        for(int i=0;i<nums.size();i++){
            if(nums[i]!=nums[nums[i]-1]){
                //tmp = nums[nums[i]-1];
                //nums[nums[i]-1] = nums[i];
                //nums[i] = tmp;
                swap(nums[i], nums[nums[i] - 1]);
                i --;
            }
        }
        for(int i=0;i<nums.size();i++){
            if(nums[i]!=i+1)
                re.push_back(i+1);
        }
        return re;
    }
};

Minimum Moves to Equal Array Elements

"""很巧妙
"""
class Solution {
public:
    int minMoves(vector<int>& nums) {
        int m=INT_MAX, res=0;
        for(int i:nums) m=min(m,i);
        for(int i:nums) res+=(i-m);
        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值