zoukankan      html  css  js  c++  java
  • LeetCode 第 31 场双周赛

    在区间范围内统计奇数数目

    1 int countOdds(int low, int high){
    2     int ans = (high - low) / 2 + 1;
    3     if ((low % 2 == 0 ) && (high % 2 == 0)) ans--;
    4     return ans;
    5 }
    View Code

    和为奇数的子数组数目

    arr前缀和,记录前缀和为奇数的地方,再搞个前缀和。

     1 int numOfSubarrays(int* arr, int arrSize){
     2     int mod = 1e9 + 7;
     3     int sum[arrSize + 10], odd[arrSize + 10];
     4     int ans = 0;
     5     sum[0] = arr[0];
     6     if (arr[0] % 2) odd[0] = 1, ans++;
     7     else odd[0] = 0;
     8     for (int i = 1; i < arrSize; i++) {
     9         sum[i] = sum[i - 1] + arr[i];
    10         odd[i] = odd[i - 1];
    11         if(sum[i] % 2) odd[i]++, ans++;
    12     }
    13     for (int i = 1; i < arrSize; i++) {
    14         if (sum[i - 1] % 2) {
    15             int evencnt = (arrSize - i) - (odd[arrSize - 1] - odd[i - 1]);
    16             ans = (ans + evencnt ) % mod;
    17         } else{
    18             int oddcnt = (odd[arrSize - 1] - odd[i - 1]);
    19             ans = (ans + oddcnt ) % mod;
    20         }
    21     }
    22     return ans;
    23 }
    View Code

    字符串的好分割数目

     1 int numSplits(char * s){
     2     int n = strlen(s);
     3     int a[n + 10][30];
     4     for (int i  = 0; i < 26; i++) a[0][i] = 0;
     5     a[0][s[0] - 'a']++;
     6     for (int i = 1; i < n; i++) {
     7         for (int j = 0; j < 26; j++) a[i][j] = a[i - 1][j];
     8         a[i][s[i] - 'a']++;
     9     }
    10     int ans = 0;
    11     for (int i = 0; i < n; i++) {
    12         int l = 0, r = 0;
    13         for (int j = 0; j < 26; j++) {
    14             if (a[i][j] > 0) l++;
    15             if ((a[n - 1][j] - a[i][j]) > 0) r++;
    16         }
    17         if (l == r) ans++;
    18     }
    19     return ans;
    20 }
    View Code

    形成目标数组的子数组最少增加次数

    只需要考虑升序,把升序相邻之间的差值处理下。降序的数字增加可以通过延长升序范围处理掉。

    1 int minNumberOperations(int* target, int targetSize){
    2     int res = target[0];
    3     for (int i = 1; i < targetSize; i++) {
    4         if (target[i] > target[i - 1]) res += (target[i] - target[i - 1]);
    5     }
    6     return res;
    7 }
    View Code
  • 相关阅读:
    Alpha、Beta、RC、GA版本的区别
    convertView
    Layouts
    Styles and Themes
    Android Studio
    Promise.race
    Base64
    NodeJS搭建HTTPS服务器
    CoreSeek
    Ping of Death
  • 原文地址:https://www.cnblogs.com/pavtlly/p/13881987.html
Copyright © 2011-2022 走看看