C/C++每日一练(20230419)

news/2024/11/28 6:33:41/

目录

1. 插入区间  🌟🌟🌟

2. 单词拆分  🌟🌟

3. 不同路径  🌟🌟

🌟 每日一练刷题专栏 🌟

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];}
};int main()
{Solution sol;string s = "leetcode";vector<string> wordDict = {"leet", "code"};cout << (sol.wordBreak(s, wordDict) ? "true" : "false") << endl;s = "applepenapple", wordDict = {"apple", "pen"};cout << (sol.wordBreak(s, wordDict) ? "true" : "false") << endl;s = "catsandog", wordDict = {"cats", "dog", "sand", "and", "cat"};cout << (sol.wordBreak(s, wordDict) ? "true" : "false") << endl;return 0;
}

输出:

true
true
false


3. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例 1:

输入:m = 3, n = 7
输出:28

示例 2:

输入:m = 3, n = 2
输出:3
解释:从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下

示例 3:

输入:m = 7, n = 3
输出:28

示例 4:

输入:m = 3, n = 3
输出:6

提示:

  • 1 <= m, n <= 100
  • 题目数据保证答案小于等于 2 * 109

以下程序实现了这一功能,请你填补空白处内容:

```c
#include <stdio.h>
#include <stdlib.h>
static int uniquePaths(int m, int n)
{
    int row, col;
    int *grids = malloc(m * n * sizeof(int));
    for (col = 0; col < m; col++)
    {
        grids[col] = 1;
    }
    for (row = 0; row < n; row++)
    {
        grids[row * m] = 1;
    }
    for (row = 1; row < n; row++)
    {
        for (col = 1; col < m; col++)
        {
            ______________________________;
        }
    }
    return grids[m * n - 1];
}
int main(int argc, char **argv)
{
    if (argc != 3)
    {
        fprintf(stderr, "Usage: ./test m n\n");
        exit(-1);
    }
    printf("%d\n", uniquePaths(atoi(argv[1]), atoi(argv[2])));
    return 0;
}
···

出处:

https://edu.csdn.net/practice/24116334

代码:

#include <stdio.h>
#include <stdlib.h>static int uniquePaths(int m, int n)
{int row, col;int *grids = (int*)malloc(m * n * sizeof(int));for (col = 0; col < m; col++){grids[col] = 1;}for (row = 0; row < n; row++){grids[row * m] = 1;}for (row = 1; row < n; row++){for (col = 1; col < m; col++){grids[row * m + col] = grids[row * m + col - 1] + grids[(row - 1) * m + col];}}return grids[m * n - 1];
}int main()
{printf("%d\n", uniquePaths(3, 7));printf("%d\n", uniquePaths(3, 2));printf("%d\n", uniquePaths(7, 3));printf("%d\n", uniquePaths(3, 3));return 0;
}

输出:

28
3
28
6


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


http://www.ppmy.cn/news/48817.html

相关文章

原型设计工具即时设计、Axure、Figma、Sketch,哪个更好用?

在线网页原型图设计软件的使用与桌面端相比具备优势&#xff0c;因为在线网页原型图设计软件的使用全程不需要安装&#xff0c;而且在线网页原型图设计软件也没有任何地点上的限制&#xff0c;更主要的是在线网页原型图设计软件在操作系统上也没有限制&#xff0c;不论是现在使…

运维需要懂产品和运营吗

研发团队对运维团队的诉求&#xff0c;以及运维呈现的价值已经发生了变化&#xff0c;我们更加需要能够帮助团队建设出高效运维体系的角色&#xff0c;而不是能够被动响应更多问题的角色。 打造一个运维体系&#xff0c;我们完全可以把它类比为一个产品业务体系。公司的组织架…

字节跳动正式开源分布式训练调度框架 Primus

动手点关注 干货不迷路 项目地址&#xff1a;https://github.com/bytedance/primus 随着机器学习的发展&#xff0c;模型及训练模型所需的数据量越来越大&#xff0c;也都趋向于通过分布式训练实现。而算法工程师通常需要对这些分布式框架涉及到的底层文件存储和调度系统有较深…

4.4 使用分组聚合进行组内计算

4.4 使用分组聚合进行组内计算 4.4.1 使用groupby方法拆分数据groupby方法的参数及其说明&#xff1a;groupby对象常用的描述性统计方法如下&#xff1a; 4.4.2 使用agg方法聚合数据agg函数和aggregate函数的参数说明1、使用agg求出当前数据对应的统计量2、使用agg分别求字段的…

InnoSetup 安装程序设置环境变量

InnoSetup 通过写入注册表值实现安装程序设置系统全局环境变量 环境变量以字符串值存储在注册表中&#xff0c;因此可以使用 [Registry] 区段操作它们。系统范围的环境变量位于: "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"…

使用datax 把数据从oracle导出到elasticsearch中

https://blog.csdn.net/mynameisjinxiaokai/article/details/128716467 一、datax需要python环境&#xff0c;需要先安装python 打开官网 https://www.python.org/downloads/ 此处下载2.6.5版本安装 添加环境变量 path C:\Python27\ 安装完成后 cmd 使用 python -V 查看是…

【python】制作一个简单的界面,有手就行的界面~

目录 前言准备工作试手小案例开始我们今天的案例教学尾语 &#x1f49d; 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! ttkbootstrap 是一个基于 tkinter 的界面美化库&#xff0c; 使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序。 ttkbootstrap …

池技术:连接池,线程池,内存池,进程池等汇总分析

引言 在软件开发中&#xff0c;经常会遇到需要频繁创建和销毁某些资源的情况。这些资源可能是内存、线程、数据库连接等。频繁地创建和销毁资源可能导致性能下降和资源浪费。为了解决这些问题&#xff0c;软件开发者设计了一种称为“池技术”的策略。本文将介绍池技术的由来、…