class Solution { public: bitset<20005> s; bool first; int a=-1,b=-1,lb=INT_MAX,ub=INT_MIN; vector<vector> merge(vector<vector>& intervals){ s.reset(); vector<vector> ans; for(int i=0;i<intervals.size();i++){ first=1; lb=min(lb,(intervals[i][0]<<1)+1); ub=max(ub,(intervals[i][1]<<1)+1); for(int j=(intervals[i][0]<<1)+1;j<=(intervals[i][1]<<1)+1;j+=2){ s[j]=1; if(first) first=0; else s[j-1]=1; } } for(int i=lb;i<ub+3;i+=2){ if(s[i]&&s[i+1]){ if(!~a) a=b=i; else b+=2; }else if(s[i]&&!s[i-1]) ans.emplace_back(vector({i-1>>1,i-1>>1})); else{ if(~a&&~b) ans.emplace_back(vector({a-1>>1,b+1>>1})); a=b=-1; } } return ans; } };//转换成Swift内容:class Solution { func merge(_ intervals: [[Int]]) -> [[Int]] { var s = Array(repeating: false, count: 20005) var first = true var a = -1 var b = -1 var lb = Int.max var ub = Int.min var ans = [Int]

    for interval in intervals {
        first = true
        lb = min(lb, (interval[0] << 1) + 1)
        ub = max(ub, (interval[1] << 1) + 1)
        
        var j = (interval[0] << 1) + 1
        while j <= (interval[1] << 1) + 1 {
            s[j] = true
            if first {
                first = false
            } else {
                s[j-1] = true
            }
            j += 2
        }
    }
    
    var i = lb
    while i < ub + 3 {
        if s[i] && s[i+1] {
            if a == -1 {
                a = i
                b = i
            } else {
                b += 2
            }
        } else if s[i] && !s[i-1] {
            ans.append([i-1>>1, i-1>>1])
        } else {
            if a != -1 && b != -1 {
                ans.append([a-1>>1, b+1>>1])
            }
            a = -1
            b = -1
        }
        i += 2
    }
    
    return ans
}

}

Merge Intervals Algorithm Optimization with Bitset in C++ and Swift

原文地址: https://www.cveoy.top/t/topic/qeNN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录