
目录
1. 插入区间
2. 单词拆分
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
1. 插入区间
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5] 输出:[[1,5],[6,9]]
示例 2:
输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8] 输出:[[1,2],[3,10],[12,16]] 解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。
示例 3:
输入:intervals = [], newInterval = [5,7] 输出:[[5,7]]
示例 4:
输入:intervals = [[1,5]], newInterval = [2,3] 输出:[[1,5]]
示例 5:
输入:intervals = [[1,5]], newInterval = [2,7] 输出:[[1,7]]
提示:
- 0 <= intervals.length <= 104
- intervals[i].length == 2
- 0 <= intervals[i][0] <= intervals[i][1] <= 105
- intervals根据- intervals[i][0]按 升序 排列
- newInterval.length == 2
- 0 <= newInterval[0] <= newInterval[1] <= 105
以下程序实现了这一功能,请你填补空白处内容:
```c++
 #include <stdio.h>
 #include <stdlib.h>
 static int compare(const void *a, const void *b)
 {
     return ((int *)a)[0] - ((int *)b)[0];
 }
 int **insert(int **intervals, int intervalsSize, int *intervalsColSize, int *newInterval,
              int newIntervalSize, int *returnSize, int **returnColumnSizes)
 {
     int i, len = 0;
     int *tmp = malloc((intervalsSize + 1) * 2 * sizeof(int));
     for (i = 0; i < intervalsSize; i++)
     {
         tmp[i * 2] = intervals[i][0];
         tmp[i * 2 + 1] = intervals[i][1];
     }
     tmp[i * 2] = newInterval[0];
     tmp[i * 2 + 1] = newInterval[1];
     qsort(tmp, intervalsSize + 1, 2 * sizeof(int), compare);
     int **results = malloc((intervalsSize + 1) * sizeof(int *));
     results[0] = malloc(2 * sizeof(int));
     results[0][0] = tmp[0];
     results[0][1] = tmp[1];
     for (i = 1; i < intervalsSize + 1; i++)
     {
         results[i] = malloc(2 * sizeof(int));
         if (tmp[i * 2] > results[len][1])
         {
             len++;
             ________________________;
         }
         else if (tmp[i * 2 + 1] > results[len][1])
         {
             results[len][1] = tmp[i * 2 + 1];
         }
     }
     len += 1;
     *returnSize = len;
     *returnColumnSizes = malloc(len * sizeof(int));
     for (i = 0; i < len; i++)
     {
         (*returnColumnSizes)[i] = 2;
     }
     return results;
 }
 int main(int argc, char **argv)
 {
     if (argc < 3 || argc % 2 == 0)
     {
         fprintf(stderr, "Usage: ./test new_s new_e s0 e0 s1 e1...");
         exit(-1);
     }
     int new_interv[2];
     new_interv[0] = atoi(argv[1]);
     new_interv[1] = atoi(argv[2]);
     int i, count = 0;
     int *size = malloc((argc - 3) / 2 * sizeof(int));
     int **intervals = malloc((argc - 3) / 2 * sizeof(int *));
     for (i = 0; i < (argc - 3) / 2; i++)
     {
         intervals[i] = malloc(2 * sizeof(int));
         intervals[i][0] = atoi(argv[i * 2 + 3]);
         intervals[i][1] = atoi(argv[i * 2 + 4]);
     }
     int *col_sizes;
     int **results = insert(intervals, (argc - 3) / 2, size, new_interv, 2, &count, &col_sizes);
     for (i = 0; i < count; i++)
     {
         printf("[%d,%d]\n", results[i][0], results[i][1]);
     }
     return 0;
 }
 ```
出处:
https://edu.csdn.net/practice/25949978
代码:
#include <stdio.h>
#include <stdlib.h>
 
static int compare(const void *a, const void *b)
{
    return ((int *)a)[0] - ((int *)b)[0];
}
 
int **insert(int **intervals, int intervalsSize, int *intervalsColSize, int *newInterval,
             int newIntervalSize, int *returnSize, int **returnColumnSizes)
{
    int i, len = 0;
    int *tmp = (int*)malloc((intervalsSize + 1) * 2 * sizeof(int));
    for (i = 0; i < intervalsSize; i++)
    {
        tmp[i * 2] = intervals[i][0];
        tmp[i * 2 + 1] = intervals[i][1];
    }
    tmp[i * 2] = newInterval[0];
    tmp[i * 2 + 1] = newInterval[1];
    qsort(tmp, intervalsSize + 1, 2 * sizeof(int), compare);
    int **results = (int**)malloc((intervalsSize + 1) * sizeof(int *));
    results[0] = (int*)malloc(2 * sizeof(int));
    results[0][0] = tmp[0];
    results[0][1] = tmp[1];
    for (i = 1; i < intervalsSize + 1; i++)
    {
        results[i] = (int*)malloc(2 * sizeof(int));
        if (tmp[i * 2] > results[len][1])
        {
            len++;
			results[len][0] = tmp[i * 2];
			results[len][1] = tmp[i * 2 + 1];
        }
        else if (tmp[i * 2 + 1] > results[len][1])
        {
            results[len][1] = tmp[i * 2 + 1];
        }
    }
    len += 1;
    *returnSize = len;
    *returnColumnSizes = (int*)malloc(len * sizeof(int));
    for (i = 0; i < len; i++)
    {
        (*returnColumnSizes)[i] = 2;
    }
    return results;
}
 
int main(int argc, char* argv[])
{
	if (argc<3) return 1;
    int new_interv[2];
    new_interv[0] = atoi((char*)argv[1]);
    new_interv[1] = atoi((char*)argv[2]);
    int i, count = 0;
    int *size = (int*)malloc((argc - 3) / 2 * sizeof(int));
    int **intervals = (int**)malloc((argc - 3) / 2 * sizeof(int *));
    for (i = 0; i < (argc - 3) / 2; i++)
    {
        intervals[i] = (int*)malloc(2 * sizeof(int));
        intervals[i][0] = atoi((char*)argv[i * 2 + 3]);
        intervals[i][1] = atoi((char*)argv[i * 2 + 4]);
    }
    int *col_sizes;
    int **results = insert(intervals, (argc - 3) / 2, size, new_interv, 2, &count, &col_sizes);
    for (i = 0; i < count; i++)
    {
        printf("[%d,%d]\n", results[i][0], results[i][1]);
    }
    return 0;
}
输出:
略
2. 单词拆分
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
说明:
- 拆分时可以重复使用字典中的单词。
- 你可以假设字典中没有重复的单词。
示例 1:
输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。
示例 2:
输入: s = "applepenapple", wordDict = ["apple", "pen"] 输出: true 解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。 注意你可以重复使用字典中的单词。
示例 3:
输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] 输出: false
出处:
https://edu.csdn.net/practice/25949980
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    bool wordBreak(string s, vector<string> &wordDict)
    {
        map<string, int> tmp;
        for (int i = 0; i < wordDict.size(); i++)
        {
            tmp[wordDict[i]]++;
        }
        int n = s.length();
        vector<bool> res(n + 1, false);
        res[0] = true;
        for (int i = 0; i <= n; i++)
        {
            for (int j = 0; j < i; j++)
            {
                if (res[j] && tmp[s.substr(j, i - j)])
                {
                    res[i] = true;
                    break;
                }
            }
        }
        return res[n];
    }
};输出:
出处:
代码:
c++输出:
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
|  | Golang每日一练 专栏 | 
|  | Python每日一练 专栏 | 
|  | C/C++每日一练 专栏 | 
|  | Java每日一练 专栏 | 



















