【CSDN】每日一练 2022-10-18

  • Post author:
  • Post category:其他



1、二叉树的右视图

给定一个二叉树的根节点

root

,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例1:

输入: [1,2,3,null,5,null,4]

输出: [1,3,4]

示例 2:

输入: [1,null,3]

输出: [1,3]

示例 3:

输入: []

输出: []

#include <bits/stdc++.h>
using namespace std;
struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution
{
public:
    vector<int> rightSideView(TreeNode *root)
    {
        vector<int> ret;
        queue<TreeNode *> queues[2];

        if (root != NULL)
            queues[0].push(root);

        int i = 0, j = 1, tmp;
        TreeNode *p;

        while (!queues[0].empty() || !queues[1].empty())
        {
            while (!queues[i].empty())
            {
                p = queues[i].front();
                queues[i].pop();

                if (p->left)
                    queues[j].push(p->left);

                if (p->right)
                    queues[j].push(p->right);

                tmp = p->val;
            }
            ret.push_back(tmp);
            i = (i + 1) % 2;
            j = (j + 1) % 2;
        }
        return ret;
    }
};


2、输入一个数查找比它小的元素

一个整型数组有 10 个元素,请先给这 10 个元素赋值,然后随便输入一个数,最后输出数组中比这个数小的所有元素,每个数用空格隔开,如果没有找到,则输出 not find。

#include <stdio.h>
int main()
{
    int a[10], i, n;
    int isfind = 0;
    printf("please set array values:");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    printf("please enter one num:");
    scanf("%d", &n);

    for (i = 0; i < 10; i++)
    {
		if(a[i] < n){
            isfind = 1;
            printf("%d", a[i]);
        }
    }

    if (isfind)
        printf("\n");
    else
        printf("not find\n");

    return 0;
}


3、重复的DNA序列

所有 DNA 都由一系列缩写为

'A'



'C'



'G'



'T'

的核苷酸组成,例如:

"ACGAATTCCG"

。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。

编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串

s

中出现次数超过一次。

示例 1:

输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”

输出:[“AAAAACCCCC”,”CCCCCAAAAA”]

示例 2:

输入:s = “AAAAAAAAAAAAA”

输出:[“AAAAAAAAAA”]

提示:


0 <= s.length <= 105


s[i]



'A'



'C'



'G'



'T'

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

class Solution
{
public:
    vector<string> findRepeatedDnaSequences(string s)
    {
        std::map<std::string, int> word_map;
        std::vector<std::string> result;

        for (int i = 0; i < s.length(); i++)
        {
            std::string word = s.substr(i, 10);
            if (word_map.find(word) != word_map.end())
            {
                word_map[word] += 1;
            }
            else
            {
                word_map[word] = 1;
            }
        }

        std::map<std::string, int>::iterator it;
        for (it = word_map.begin(); it != word_map.end(); it++)
        {
            if (it->second > 1)
            {
                result.push_back(it->first);
            }
        }
        return result;
    }
};



版权声明:本文为qq_34438969原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。