zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

C++ 每日
2023-09-14 09:01:29 时间

目录

1. 搜索旋转排序数组  🌟🌟

2. 字符串中出现最多的字母  🌟

3. 从指定位置插入字符串  🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 搜索旋转排序数组

整数数组 nums 按升序排列,数组中的值 互不相同 。

在传递给函数之前,nums 在预先未知的某个下标 k0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。

示例 1:

输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4

示例 2:

输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1

示例 3:

输入:nums = [1], target = 0
输出:-1

提示:

  • 1 <= nums.length <= 5000
  • -10^4 <= nums[i] <= 10^4
  • nums 中的每个值都 独一无二
  • 题目数据保证 nums 在预先未知的某个下标上进行了旋转
  • -10^4 <= target <= 10^4

进阶:你可以设计一个时间复杂度为 O(log n) 的解决方案吗?

出处:

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

代码:

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int search(vector<int> &nums, int target)
    {
        int lo = 0;
        int hi = nums.size() - 1;
        while (lo <= hi)
		{
            int mid = lo + (hi - lo) / 2;
            if (nums[mid] == target)
            {
                return mid;
            }
            if (nums[lo] <= nums[mid])
            {
				if (nums[lo] <= target && target < nums[mid])
				{
				    hi = mid - 1;
				}
				else
				{
				    lo = mid + 1;
				}
            }
            else
            {
                if (nums[mid] < target && target <= nums[hi])
                {
                    lo = mid + 1;
                }
                else
                {
                    hi = mid - 1;
                }
            }
		}
        return -1;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {4,5,6,7,0,1,2};
    cout << s.search(nums, 0) << endl;
    nums = {4,5,6,7,0,1,2};
    cout << s.search(nums, 3) << endl;
    
    return 0;
}

输出:

4
-1


2. 字符串中出现最多的字母

一个字符串(string)里出现的次数最多的称为幸运字符。例如,在字符串abbccc中,c 出现的次数最多,所以这个幸运字符就是 c 啦!

Input 第一行是测试数据的组数n,接下来的每组测试数据占一行,每行数据不超过1000个字符且非空。 字符串里只含小写字母。

Output 每组数据对应输出一行,包括出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。

Sample Input
2
abbccc
adfadffasdf

Sample Output
c 3 f 4

出处:

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

代码:

#include <string.h>
#include"stdio.h"
int main(void)
{
    int n,i, z[26], max, xia;
    char c[1050], ch;
    scanf("%d",&n);
    while(n>0)
    {
        n--;
        scanf("%s", c);
        for(i=0; i<26; i++)
            z[i]=0;
        xia=strlen(c);
        for(i=0; i<xia; i++)
            z[c[i]-'a']++;
        max=z[0]; xia=0;
        for(i=1; i<=25; i++)
        if(z[i]>max){ 
            max=z[i];
            xia=i;
        }
        ch='a'+xia;
        printf("%c %d\n", ch, max);
    }
    return 0;
}

输入输出:

2
abbccc
c 3
adfadffasdf
f 4


3. 从指定位置插入字符串

编写程序,输入字符串S1和S2以及插入位置n,在字符串S1中的指定位置n处插入字符串S2。

例如,输入“jiangsu”、“123”和位置3,则输出“ji123angsu”。

出处:

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

代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str1;
    string str2;
    int pos;
    do
    {
        if ((cin >> str1 >> str2 >> pos) && (pos >= 1))
        {
            str1.insert(pos - 1, str2);
            cout << str1 << endl;
        }
        else
        {
            cout << "Invalid Input" << endl;
            break;
        }
    } while (false);
    return 0;
}

输出:

jiangsu
123
3
ji123angsu


🌟 每日一练刷题专栏 🌟

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

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

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

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

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏