当前位置: 首页 > article >正文

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

目录

1. 将数据流变为多个不相交区间  🌟🌟🌟

2. 冒泡法排序大小  🌟

3. Pow(x, n)  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 将数据流变为多个不相交区间

 给你一个由非负整数 a1, a2, ..., an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。

实现 SummaryRanges 类:

  • SummaryRanges() 使用一个空数据流初始化对象。
  • void addNum(int val) 向数据流中加入整数 val 。
  • int[][] getIntervals() 以不相交区间 [starti, endi] 的列表形式返回对数据流中整数的总结。

示例:

输入:
["SummaryRanges", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals"]
[[], [1], [], [3], [], [7], [], [2], [], [6], []]
输出:
[null, null, [[1, 1]], null, [[1, 1], [3, 3]], null, [[1, 1], [3, 3], [7, 7]], null, [[1, 3], [7, 7]], null, [[1, 3], [6, 7]]]
解释: 
SummaryRanges summaryRanges = new SummaryRanges(); 
summaryRanges.addNum(1); // arr = [1] 
summaryRanges.getIntervals(); // 返回 [[1, 1]] 
summaryRanges.addNum(3); // arr = [1, 3] 
summaryRanges.getIntervals(); // 返回 [[1, 1], [3, 3]] 
summaryRanges.addNum(7); // arr = [1, 3, 7] 
summaryRanges.getIntervals(); // 返回 [[1, 1], [3, 3], [7, 7]] 
summaryRanges.addNum(2); // arr = [1, 2, 3, 7] 
summaryRanges.getIntervals(); // 返回 [[1, 3], [7, 7]] 
summaryRanges.addNum(6); // arr = [1, 2, 3, 6, 7] 
summaryRanges.getIntervals(); // 返回 [[1, 3], [6, 7]]

提示:

  • 0 <= val <= 10^4
  • 最多调用 addNum 和 getIntervals 方法 3 * 10^4 次

进阶:如果存在大量合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?

出处:

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

代码:

#include <bits/stdc++.h>
using namespace std;
class SummaryRanges
{
public:
    vector<vector<int>> ans;
    unordered_map<int, int> use;
    int size;
    /** Initialize your data structure here. */
    SummaryRanges()
    {
        size = 0;
    }
    void addNum(int val)
    {
        if (use.count(val) != 0)
            return;
        use[val] = 1;
        int i;
        for (i = 0; i < size; i++)
            if (val < ans[i][0])
                break;
        if (i == 0)
        {
            if (size == 0)
            {
                ans.insert(ans.begin(), {val, val});
                size++;
            }
            else if (val + 1 == ans[i][0])
                ans[0][0] = val;
            else
            {
                ans.insert(ans.begin(), {val, val});
                size++;
            }
        }
        else if (i == size)
        {
            if (val - 1 == ans[i - 1][1])
                ans[i - 1][1] = val;
            else
            {
                ans.push_back({val, val});
                size++;
            }
        }
        else
        {
            if (val + 1 != ans[i][0] && val - 1 != ans[i - 1][1])
            {
                ans.insert(ans.begin() + i, {val, val});
                size++;
            }
            else if (val + 1 == ans[i][0] && val - 1 == ans[i - 1][1])
            {
                ans[i - 1][1] = ans[i][1];
                ans.erase(ans.begin() + i);
                size--;
            }
            else if (val + 1 == ans[i][0])
            {
                ans[i][0] = val;
            }
            else
            {
                ans[i - 1][1] = val;
            }
        }
    }
    vector<vector<int>> getIntervals()
    {
        return ans;
    }
};
/**
 * Your SummaryRanges object will be instantiated and called as such:
 * SummaryRanges* obj = new SummaryRanges();
 * obj->addNum(val);
 * vector<vector<int>> param_2 = obj->getIntervals();
 */
 
 string Vector2dToString(vector<vector<int>> vec2d, string sep = ",")
 {
     stringstream ss;
     ss << "[";
     for (int i = 0; i < vec2d.size(); ++i) {
         ss << "[";
         copy(vec2d[i].begin(), vec2d[i].end(), ostream_iterator<int>(ss, sep.c_str()));
 		ss.seekp(-(int)sep.size(), ios_base::end);
         ss << "]" << sep;
     }
     ss.seekp(-(int)sep.size(), ios_base::end);
     ss << "]";
     return ss.str();
 }

int main()
{
	SummaryRanges summaryRanges;
	vector<vector<int>> res;
	summaryRanges.addNum(1);      // arr = [1]
	res = summaryRanges.getIntervals(); // 返回 [[1, 1]]
	cout << Vector2dToString(res, ", ") << endl;
	summaryRanges.addNum(3);      // arr = [1, 3]
	res = summaryRanges.getIntervals(); // 返回 [[1, 1], [3, 3]]
	cout << Vector2dToString(res, ", ") << endl;
	summaryRanges.addNum(7);      // arr = [1, 3, 7]
	res = summaryRanges.getIntervals(); // 返回 [[1, 1], [3, 3], [7, 7]]
	cout << Vector2dToString(res, ", ") << endl;
	summaryRanges.addNum(2);      // arr = [1, 2, 3, 7]
	res = summaryRanges.getIntervals(); // 返回 [[1, 3], [7, 7]]
	cout << Vector2dToString(res, ", ") << endl;
	summaryRanges.addNum(6);      // arr = [1, 2, 3, 6, 7]
	res = summaryRanges.getIntervals(); // 返回 [[1, 3], [6, 7]]
	cout << Vector2dToString(res, ", ") << endl;
    return 0;
}

输出:

[[1, 1]]
[[1, 1], [3, 3]]
[[1, 1], [3, 3], [7, 7]]
[[1, 3], [7, 7]]
[[1, 3], [6, 7]]


2. 冒泡法排序大小

4286 3185 2895 3550 2745 按从小到大排序

出处:

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

代码:

#include <stdio.h>
#define ARR_LEN 255 
#define elemType int 
void bubbleSort (elemType arr[], int len) {
    elemType temp;
    int i, j;
    for (i=0; i<len-1; i++) 
        for (j=0; j<len-1-i; j++) { 
            if (arr[j] > arr[j+1]) { 
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
}
int main (void) {
    elemType arr[ARR_LEN] = {4286,3185,2895,3550,2745};
    int len = 5;
    int i;
    bubbleSort (arr, len);
    for (i=0; i<len; i++)
        printf ("%d\t", arr[i]);
    putchar ('\n');
    return 0;
}

输出:

2745    2895    3185    3550    4286


3. Pow(x, n)

实现 pow(xn),即计算 x 的 n 次幂函数(即,xn)。

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:

输入:x = 2.10000, n = 3
输出:9.26100

示例 3:

输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25

提示:

  • -100.0 < x < 100.0
  • -2^31 <= n <= 2^31-1
  • -10^4 <= x^n <= 10^4

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

```c++
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    double myPow(double x, int n)
    {
        if (n == INT_MIN)
        {
            double t = dfs(x, -(n / 2));
            return 1 / t * 1 / t;
        }
        else
        {
            ___________________;
        }
    }
private:
    double dfs(double x, int n)
    {
        if (n == 0)
        {
            return 1;
        }
        else if (n == 1)
        {
            return x;
        }
        else
        {
            double t = dfs(x, n / 2);
            return (n % 2) ? (x * t * t) : (t * t);
        }
    }
};
```

出处:

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

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    double myPow(double x, int n)
    {
        if (n == INT_MIN)
        {
            double t = dfs(x, -(n / 2));
            return 1 / t * 1 / t;
        }
        else
        {
            return n < 0 ? 1 / dfs(x, -n) : dfs(x, n);
        }
    }
private:
    double dfs(double x, int n)
    {
        if (n == 0)
        {
            return 1;
        }
        else if (n == 1)
        {
            return x;
        }
        else
        {
            double t = dfs(x, n / 2);
            return (n % 2) ? (x * t * t) : (t * t);
        }
    }
};
int main (void) {
    Solution s;
    cout << s.myPow(2.0, 10) << endl;
    cout << s.myPow(2.1, 3) << endl;
    cout << s.myPow(2.0, -2) << endl;
    return 0;
}

输出:

1024
9.261
0.25


🌟 每日一练刷题专栏 🌟

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

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

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

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

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

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


http://www.kler.cn/a/17255.html

相关文章:

  • android dvr黑屏
  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • 服务号消息折叠折射出的腾讯傲慢:上云会不会也一样?
  • 测试实项中的偶必现难测bug--验证码问题
  • 基于promtail+loki+grafana搭建日志系统
  • 图论基本术语
  • [Leetcode] 0697.数组的度
  • api 和 implementation 区别
  • 最大和+翻硬币(蓝桥杯JAVA解法)
  • 【python】创建python包
  • 浅谈MySQL索引以及执行计划
  • 自定义类型:结构体
  • Windeployqt 打包,缺少DLL 的原因分析,解决方法
  • 【网络】网络基础入门
  • Bean的作用域和生命周期
  • Splunk 转移数据之collect 命令
  • 功能齐全的 DIY ESP32 智能手表设计之PCB介绍
  • 一篇带你快速入门DDD领域驱动设计
  • 【JavaEE初阶】简单了解wait和notify方法~
  • MySQL 精选 35 道面试题大厂稳了(含答案)
  • 真无线耳机哪款性价比高?高性价比无线耳机排行榜
  • Apache POI,springboot中导出excel报表
  • Websocket的基本认识、使用与封装
  • JavaScript:数组---二分法
  • 【笔试强训选择题】Day7.习题(错题)解析
  • 看我如何通过帮助服务台轻松黑掉数百家公司