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

简介: C/C++每日一练(20230401)

1. 移动数组中的元素


将一维数组中的元素循环左移 k 个位置


输入描述


第 1 行是一维数组元素的个数 n (数组大小)

第 2 行是一个整数 k , 表示移动的位置

下面 n 行为数组的元素个数

输出描述

输出 n 行,表示移动后的数字


出处:

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

代码:

#include <stdio.h>
#define N 10000
int main()
{
    int k, a[N], b[N], n, t, w, i;
    scanf("%d", &n);
    scanf("%d", &k);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for (i = 0; i < k % n; i++)
        b[i] = a[i];
    for (i = 0; i < n; i++)
    {
    if (i < n - k % n)
        a[i] = a[i + k % n];
    else
        a[i] = b[i - n + k % n];
    }
    for (i = 0; i < n; i++)
        printf("%d\n", a[i]);
    return 0;
}


输出:

5↙

2↙

1 2 3 4 5↙

3

4

5

1

2




2. 好数对


已知一个集合A,对A中任意两个不同的元素求和,若求得的和仍在A内,则称其为好数对。

例如,集合A={1 2 3 4},1+2=3,1+3=4,则1,2和1,3 是两个好数对。


编写程序求给定集合中好数对的个数。

注:集合中最多有1000个元素,元素最大不超过10000

示例1:

4↙

1 2 3 4↙

2

示例2:

7↙

2456 3251 654 890 100 754 1234↙

1

其中,“↙”表示输入回车

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


```c++
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n, i, j, t;
    scanf("%d", &n);
    int *a = (int *)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    int cout = 0;
    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            for (t = 0; t < n; t++)
                ____________;
        }
    }
    printf("%d", cout);
    free(a);
    return 0;
}
```


出处:

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

代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n, i, j, t;
    scanf("%d", &n);
    int *a = (int *)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    int cout = 0;
    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            for (t = 0; t < n; t++)
        if (a[i] + a[j] == a[t])
            cout++;
        }
    }
    printf("%d", cout);
    free(a);
    return 0;
}


输入输出:

7↙

 2456 3251 654 890 100 754 1234↙

 1



3. 排序数组中查找元素的首末位置


原标题:在排序数组中查找元素的第一个和最后一个位置


给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

进阶:

   你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?


示例 1:

输入:nums = [5,7,7,8,8,10], target = 8

输出:[3,4]


示例 2:

输入:nums = [5,7,7,8,8,10], target = 6

输出:[-1,-1]


示例 3:

输入:nums = [], target = 0

输出:[-1,-1]


提示:


   0 <= nums.length <= 10^5

   -10^9 <= nums[i] <= 10^9

   nums 是一个非递减数组

   -10^9 <= target <= 10^9


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

```c++
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    vector<int> searchRange(vector<int> &nums, int target)
    {
        vector<int> res;
        res.push_back(binary_search_begin(nums, target));
        res.push_back(binary_search_end(nums, target));
        return res;
    }
private:
    int binary_search_begin(vector<int> nums, int target)
    {
        int lo = -1;
        int hi = nums.size();
        while (lo + 1 < hi)
        {
            int mid = lo + (hi - lo) / 2;
            if (target > nums[mid])
            {
                lo = mid;
            }
            else
            {
                hi = mid;
            }
        }
        if (hi == nums.size() || nums[hi] != target)
        {
            return -1;
        }
        else
        {
            return hi;
        }
    }
    int binary_search_end(vector<int> nums, int target)
    {
        int lo = -1;
        int hi = nums.size();
        while (lo + 1 < hi)
        {
            int mid = lo + (hi - lo) / 2;
            ______________;
        }
        if (lo == -1 || nums[lo] != target)
        {
            return -1;
        }
        else
        {
            return lo;
        }
    }
};
```



出处:

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

代码:

二分查找,时间复杂度为 O(log n)

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
  vector<int> searchRange(vector<int> &nums, int target)
  {
    vector<int> res;
    res.push_back(binary_search_begin(nums, target));
    res.push_back(binary_search_end(nums, target));
    return res;
  }
private:
  int binary_search_begin(vector<int> nums, int target)
  {
    int lo = -1;
    int hi = nums.size();
    while (lo + 1 < hi)
    {
      int mid = lo + (hi - lo) / 2;
      if (target > nums[mid])
      {
        lo = mid;
      }
      else
      {
        hi = mid;
      }
    }
    if (hi == nums.size() || nums[hi] != target)
    {
      return -1;
    }
    else
    {
      return hi;
    }
  }
  int binary_search_end(vector<int> nums, int target)
  {
    int lo = -1;
    int hi = nums.size();
    while (lo + 1 < hi)
    {
      int mid = lo + (hi - lo) / 2;
      if (target < nums[mid])
      {
        hi = mid;
      }
      else
      {
        lo = mid;
      }
    }
    if (lo == -1 || nums[lo] != target)
    {
      return -1;
    }
    else
    {
      return lo;
    }
  }
};
int main()
{
  vector<int> res, nums = {5,7,7,8,8,10};
  Solution s;
  res = s.searchRange(nums, 8);
  cout << "[" << res[0] << ",";
  cout << res[1] << "]" << endl;
  return 0;
}


输出:

[3,4]



目录
相关文章
|
4月前
|
Linux 监控 Ubuntu
Linux 终端操作命令(1)
Linux 终端操作命令(1)
89 1
Linux 终端操作命令(1)
|
4月前
|
算法 Java Go
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
40 1
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
|
4月前
|
Linux 监控 Shell
Linux 终端命令之文件浏览(4) head, tail
Linux 终端命令之文件浏览(4) head, tail
46 0
Linux 终端命令之文件浏览(4) head, tail
|
4月前
|
Shell Linux 机器学习/深度学习
Linux 终端操作命令(3)内部命令用法
Linux 终端操作命令(3)内部命令用法
72 0
Linux 终端操作命令(3)内部命令用法
|
4月前
|
Python Linux Ubuntu
Linux系统部署Python语言开发运行环境
Linux系统部署Python语言开发运行环境
197 0
Linux系统部署Python语言开发运行环境
|
4月前
|
Go Unix 开发者
Go语言time库,时间和日期相关的操作方法
Go语言time库,时间和日期相关的操作方法
87 0
Go语言time库,时间和日期相关的操作方法
|
4月前
|
C++ 存储 Serverless
力扣C++|一题多解之数学题专场(2)
力扣C++|一题多解之数学题专场(2)
43 0
力扣C++|一题多解之数学题专场(2)
|
4月前
|
Go 机器学习/深度学习 Rust
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
76 0
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
|
4月前
|
Java Go C++
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
56 0
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
|
4月前
|
Java Go C++
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
47 0
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort