首页 > 其他分享 >LeetCode(1)

LeetCode(1)

时间:2022-11-13 19:44:40浏览次数:72  
标签:string int sum 正方形 vector 数组 LeetCode

优美子数组

将输入的数组逐个取模,得到一个新的数组,计算其前缀和数组

子数组(i到j)中如果恰好有K个1,即和为K,那么这个数组就满足了题目要求,有K个奇数数字

转化: sum[i] - sum[j] == k 等价于 sum[j] == sum[i]-k

此时遍历每一个i,统计j的个数即可

class Solution {
public:
    int numberOfSubarrays(vector<int>& nums, int k) {
        int len = nums.size();
        vector<int> sum(len+1);
        vector<int> count(len+1);

        for (int i=0;i<len;i++) {
            sum[i+1] = nums[i] % 2 + sum[i]; 
        }
        for (int i=0;i<len+1;i++) {
            count[sum[i]]++; 
        }

        int ans = 0;
        for (int i=0;i<len+1;i++) {
            if (sum[i] - k >= 0) {
                ans += count[sum[i]-k];
            }
        }
        return ans;
    }
};

多米诺和托米诺平铺

第i列后正方形未被瓷砖覆盖,则第i列的正方形有4种被覆盖的情况:

  1. 一个正方形都未被覆盖,状态记为0

  2. 只有上方正方形被覆盖,状态记为1

  3. 只有下方正方形被覆盖,状态记为2

  4. 上下两个正方形被覆盖,状态记为3

写出状态转移方程

const long long mod = 1e9 + 7;
class Solution {
public:
    int numTilings(int n) {
        vector<vector<long long>> dp(n+1,vector<long long>(4));
        dp[0][3] = 1;
        for (int i=1;i<=n;i++) {
            dp[i][0] = dp[i-1][3];
            dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % mod;
            dp[i][2] = (dp[i-1][0] + dp[i-1][1]) % mod;
            dp[i][3] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2] + dp[i-1][3]) % mod;
        }
        return dp[n][3];
    }
};

Determine if String Halves Are Alike

先将字符串分半,然后遍历两个字串,使用find_first_of可以判断是否含有元音字母,统计个数后进行比较

class Solution {
public:
    bool halvesAreAlike(string s) {
        string vowels = "aeiouAEIOU";
        string a = s.substr(0,s.size()/2);
        string b = s.substr(s.size()/2);

        int count1 = 0,count2 = 0;
        for (int i=0;i<a.size();i++) {
            if (vowels.find_first_of(a[i]) != string::npos) {
                count1++;
            }
        }
        for (int i=0;i<b.size();i++) {
            if (vowels.find_first_of(b[i]) != string::npos) {
                count2++;
            }
        }
        return count1 == count2;
    }
};

标签:string,int,sum,正方形,vector,数组,LeetCode
From: https://www.cnblogs.com/N3ptune/p/16886721.html

相关文章

  • Leetcode刷题第三周
    字符串:反转字符串344classSolution{publicvoidreverseString(char[]s){//左右指针intleftNode=0;intrifhtNode=s.lengt......
  • leetcode 5. 最长回文子串
    给你一个字符串 s,找到 s 中最长的回文子串。 示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb" 提示:1<......
  • 剑指 Offer 41. 数据流中的中位数 - 力扣(Leetcode)
    剑指Offer41.数据流中的中位数-力扣(Leetcode)分析维护两个堆,一个大根堆,一个小根堆。插入操作:当进行插入时,先判断大根堆中是否有元素,如果没有直接插入大根堆,若有......
  • 剑指 Offer 59 - I. 滑动窗口的最大值 - 力扣(Leetcode)
    剑指Offer59-I.滑动窗口的最大值-力扣(Leetcode)一.分析方法一:数组长度为1e5,k的大小为1e4,因此直接暴力计算会TLE。我们可以思考一个更复杂的问题:询问任意区间中的......
  • [回溯算法]leetcode40. 组合总和 II(c实现)
    题目给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中......
  • leetcode 647. 回文子串 js实现
    给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。......
  • LeetCode 665. 非递减数列
    classSolution{public:boolcheckPossibility(vector<int>&nums){intn=nums.size();for(inti=0;i<n-1;i++){intx=nums[i......
  • LeetCode刷题记录.Day13
    四数之和18.四数之和-力扣(LeetCode)classSolution{public:vector<vector<int>>fourSum(vector<int>&nums,inttarget){vector<vector<int>>res......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:最小栈
    题目:设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。实现MinStack类:MinStack()初始化堆栈对象。voidpush(intval)将元素val推入堆栈。voidpop......
  • leetcode-888-easy
    FairCandySwapAliceandBobhaveadifferenttotalnumberofcandies.YouaregiventwointegerarraysaliceSizesandbobSizeswherealiceSizes[i]isthenum......