【毎日の練習】日(3)


1つ、複数の選択肢

eg1

ここに画像の説明を挿入

eg2

ここに画像の説明を挿入

eg3

ここに画像の説明を挿入

eg4

ここに画像の説明を挿入

eg5

ここに画像の説明を挿入
ここに画像の説明を挿入

2.プログラミングの質問

eg1

ここに画像の説明を挿入
[解決策のアイデア]:
文字列をトラバースし、curを使用して連続番号文字列を記録します。数字以外の文字が見つかった場合は、連続番号文字列が終了したことを意味します。次に、番号文字列を前の番号文字列と比較します。 longの場合は、長い数値文字列をretに更新します。
ここに画像の説明を挿入

#include <iostream>
#include <string>
using namespace std;

int main()
{
    
    
    string s;
    cin >> s;
    string cur;
    string ret;
    
    //<= s.size();防止出现abcd12345ed125ss123456789
    for(int i = 0; i <=s.size(); ++i)
    {
    
    
        //如果是数字字符就插入cur
        if('0' <= s[i] && s[i] <= '9')
        {
    
    
            cur += s[i];
        }
        
        else 
        {
    
    
            //判断cur的长度是否大于ret的长度
            if(cur.size() > ret.size())
            {
    
    
                ret = cur;
            }
            //清空cur
            cur.clear();
        }
    }
    
    cout << ret << endl;
    return 0;
}

eg2

ここに画像の説明を挿入
[問題解決のアイデア1]:
アイデア1:配列を並べ替えた後、条件を満たす番号が存在する場合は、配列の中央にある番号である必要があります。この方法は理解しやすいですが、O(NlogN)の時間計算量は、クイックソートが含まれるため最適ではありません。

class Solution {
    
    
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) 
    {
    
    
        sort(numbers.begin(), numbers.end());
        int index = numbers.size() / 2;
        return numbers[index];
    }
};

[問題解決のアイデア2]:モード:
配列の半分以上の長さで表示される数値。2つの数値が等しくない場合は、2つの数値を削除します。最悪の場合、1つのモードと1つの非モードを削除します。時間。、そしてモードがある場合、最後に残っている数字はモードでなければなりません
ここに画像の説明を挿入

class Solution {
    
    
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) 
    {
    
    
        int result = numbers[0];
        int times = 1;
        for(int i = 1; i < numbers.size(); ++i)
        {
    
    
            if(times != 0)
            {
    
    
                if(result == numbers[i])
                {
    
    
                    ++times;
                }
                else 
                {
    
    
                    --times;
                }
            }
            
            else 
            {
    
    
                result = numbers[i];
                times = 1;
            }
        }
        
        return result;
    }
};

おすすめ

転載: blog.csdn.net/qq_52809807/article/details/123759751