首页 > 其他分享 >Leetcode weekly conetest 315

Leetcode weekly conetest 315

时间:2022-10-25 14:45:35浏览次数:84  
标签:10 cnt return nums int 315 ++ conetest Leetcode

Leetcode weekly conetest 315

1.与对应负数同时存在的最大正整数

解法: 碰到这种查询数字是否存在的时候,用哈希表就可以很好的解决,我们首先将所有数字都插入到哈希表中,然后按照题目要求进行查询即可。

Tag: 哈希

Code:

class Solution {
public:
    int findMaxK(vector<int>& nums) {
        unordered_set<int> exist;
        for(auto&& val : nums) {
            exist.insert(val);
        }
        int ans = -1;
        for(int i = 0; i < nums.size(); ++i) {
            if(exist.find(nums[i]) != exist.end() && exist.find(-nums[i]) != exist.end()) {
                ans = max(ans, abs(nums[i]));
            }
        }
        return ans;
    }
};

2.反转之后不同整数的数目

解法: 和第一题类似,我们将数组中每个数字以及他们的反转插入到哈希表中,然后返回哈希表的大小即可。

Tag: 哈希

Code:

class Solution {
private:
    vector<int> sup;
public:
    int m_reverse(int t) {
        int cnt = 0;
        int res = 0;
        while(t) {
            sup[cnt++] = t % 10;
            t /= 10;
        }
        for(int i = 0; i < cnt; ++i) {
            res = res * 10 + sup[i];
        }
        return res;
    }
    int countDistinctIntegers(vector<int>& nums) {
        unordered_set<int> cnt;
        sup.resize(10);
        for(auto val : nums) {
            cnt.insert(val);
            cnt.insert(m_reverse(val));
        }
        return cnt.size();
    }
};

3.反转之后的数字和

解法: 裸题,直接按照题目进行模拟即可,数据量\(10^5\)并不大,直接输出即可。

Tag: 模拟

Code:

class Solution {
private:
    vector<int> sup;
public:
    int m_reverse(int t) {
        int cnt = 0;
        int res = 0;
        while(t) {
            sup[cnt++] = t % 10;
            t /= 10;
        }
        for(int i = 0; i < cnt; ++i) {
            res = res * 10 + sup[i];
        }
        return res;
    }
    
    bool sumOfNumberAndReverse(int num) {
        if(num == 0) return true;
        sup.resize(10);
        for(int i = 0; i < num; ++i) {
            if(i + m_reverse(i) == num) {
                return true;
            }
        }
        return false;
    }
};

4.统计定界子数组的数目

解法: 我们可以通过统计所有不符合条件的值的个数,假设有\(k\)个的话,我们可以将整个区间分为\(k + 1\)个区间,然后分别统计每个区间里符合要求的个数即可,这道题关键的便是如何统计区间内符合要求的子数组的个数,在统计时,我们可以利用双指针的方法,在\(O(n)\)的复杂度内完成。

Tag: 双指针

Code:

class Solution {
public:
    long long countSubarrays(vector<int>& nums, int minK, int maxK) {
        auto calc = [&](int left, int right) {
            int min_cnt = 0, max_cnt = 0;
            long long cnt = 0;
            for(int i = left, j = left; j <= right; ++j) {
                if(nums[j] == minK) ++min_cnt;
                if(nums[j] == maxK) ++max_cnt;
                
                while(i <= j && min_cnt > 0 && max_cnt > 0) {
                    if(nums[i] == minK) --min_cnt;
                    if(nums[i] == maxK) --max_cnt;
                    ++i;
                }
                cnt += (j - left + 1) - (j - i + 1);
            }
            return cnt;
        };
        long long ans = 0;
        int cnt = 0;
        for(int i = 0; i < nums.size(); ++i) {
            if(nums[i] < minK || nums[i] > maxK) {
                ans += calc(i - cnt, i - 1);
                cnt = 0;  
            } else {
                cnt++;
            }
        }
        ans += calc(nums.size() - cnt, nums.size() - 1);
        return ans;
    }
};

标签:10,cnt,return,nums,int,315,++,conetest,Leetcode
From: https://www.cnblogs.com/halftheworldaway/p/16824761.html

相关文章

  • LeetCode2447 最大公因数等于 K 的子数组数目 题解
    看到这题,发现可以直接枚举字串进行check,复杂度是\(\mathcalO(n^2(n+\logw))\),但是可以固定左端点,向右推右端点统计答案优化到\(\mathcalO(n(n+\logw))\)。虽然这里......
  • 剑指 Offer 56 - II. 数组中数字出现的次数 II - 力扣(LeetCode)
    剑指Offer56-II.数组中数字出现的次数II-力扣(LeetCode)在一个数组nums中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。思路......
  • leetcode 25 Reverse Nodes in k-Group
    给一个链表,每k个节点一组进行反转,输出反转后的链表hard难度,但突破点很好找,具体解体思路,看下面代码中每行注释publicclassLC25{publicstaticvoidmain(String[]arg......
  • leetcode刷题二十九
    leetcode刷题二十九题目叙述你和一群强盗准备打劫银行。给你一个下标从0开始的整数数组security,其中security[i]是第i天执勤警卫的数量。日子从0开始编号。同时给......
  • leetcode刷题二十八
    leetcode刷题二十八题目叙述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串“”。题目解答classSolution:deflongestCommonPrefix(......
  • leetcode刷题二十六
    leetcode刷题二十六题目叙述给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致......
  • leetcode刷题MySQL题解十八
    leetcode刷题MySQL题解十八题目叙述Views表:±--------------±--------+|ColumnName|Type|±--------------±--------+|article_id|int||author_id|int|......
  • leetcode刷题MySQL题解十五
    leetcode刷题MySQL题解十五题目叙述Employee表:±------------±-----+|ColumnName|Type|±------------±-----+|id|int||salary|int|±------------±......
  • leetcode刷题MySQL题解十三
    leetcode刷题MySQL题解十三题目叙述表:Products±------------±--------+|ColumnName|Type|±------------±--------+|product_id|int||store1|int||st......
  • leetcode刷题MySQL题解十四
    leetcode刷题MySQL题解十四题目叙述给定一个表tree,id是树节点的编号,p_id是它父节点的id。±—±-----+|id|p_id|±—±-----+|1|null||2|1||3|1......