每日训练(二)

简介: 每日训练(二),题目来源:力扣,PTA。

 目录

 

1.折半查找

2.求自定类型元素序列的中位数

3.螺旋矩阵

4.对称的二叉树


1.折半查找

题目:给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。

函数接口定义:

void Print_Factorial ( const int N );其中T是有序表,k是查找的值。

裁判测试程序样例:

输入样例:

/* 请在这里填写答案 */

###输入格式:

第一行输入一个整数n,表示有序表的元素个数,接下来一行n个数字,依次为表内元素值。 然后输入一个要查找的值。

###输出格式:

输出这个值在表内的位置,如果没有找到,输出"NOT FOUND"。

输入样例:

3

12.3 34 -5

输出样例:

12.30

解题思路:这道题就是完全直接考察折半查找:先定义出middle,然后将要需要查找的数,与middle位置的数进行比较,如果middle的数比较大,那么,将查找范围缩小到0到middle-1的位置,想反,如果middle的数比较小,则将范围缩小到middle+1到end。

int  Search_Bin(SSTable T, KeyType k)
{
    int left = 1,right = T.length;
    while(left<=right)
    {
         int mid = (left+right)/2;
        if(T.R[mid].key<k)
        {
            left = mid+1;
        }
        else if(T.R[mid].key>k)
        {
            right = mid-1;
        }
        else
        {
            return mid;
        }
    }
    return 0;
}

image.gif

2.求自定类型元素序列的中位数

题目:本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的ElementType

函数接口定义:

ElementType Median( ElementType A[], int N );

其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回NA[]元素的中位数,其值也必须是ElementType类型。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10
typedef float ElementType;
ElementType Median( ElementType A[], int N );
int main ()
{
    ElementType A[MAXN];
    int N, i;
    scanf("%d", &N);
    for ( i=0; i<N; i++ )
        scanf("%f", &A[i]);
    printf("%.2f\n", Median(A, N));
    return 0;
}
/* 你的代码将被嵌在这里 */

image.gif

输入样例:

3

12.3 34 -5

输出样例:

12.30

解题思路:由于是找中位数,因此,如果给出的数是按序排列的,那么,中间的那个数就是我们要找的中位数了。我们使用排序算法来进行排序,经过测试,使用冒泡、插入排序等等会不通过,因为这些排序比较慢,而使用希尔排序则🆗。

对于希尔排序的使用,可以通过数据结构与算法:排序_二肥是只大懒蓝猫的博客-CSDN博客

这篇文章来学习。

void shellsort(ElementType* A, int N)
{
    int gap = N;
    while (gap > 1)
    {
        gap = gap / 3 + 1;
        for (int i = 0; i < N - gap; i++)
        {
            int end = i;
            ElementType temp = A[end + gap];
            while (end >= 0)
            {
                if (A[end] > temp)
                {
                    A[end + gap] = A[end];
                    end -= gap;
                }
                else
                    break;
            }
            A[end + gap] = temp;
        }
    }
}
ElementType Median(ElementType A[], int N)
{
    shellsort(A, N);
    return A[N / 2];
}

image.gif

3.螺旋矩阵

题目:给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

QOX~5PZS)XD)OLO{04G~L9C.jpg

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]

输出:[1,2,3,6,9,8,7,4,5]


解题思路:对于这道题,我们需要分析我们在循环打印的时候,终止条件的什么?开始条件是什么?

8~}]GQR68B]FL(Y%WSN1S$X.png

如上图所示,我们需要定义四个指向数组的变量:top、bottom、left和right,用来对每条边上的数组进行变量,每当完成一轮,那么数组就会缩小一圈,则top需要++,right--,bottom--和left++。

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector <int> ans;
        if(matrix.empty())
        {
            return ans;
        }
        int left = 0;
        int right = matrix[0].size()-1;
        int top = 0;
        int bottom = matrix.size()-1;
        while(true)
        {
            //向右
            for(int i = left;i<=right;i++)
            {
                ans.push_back(matrix[top][i]);
            }
            top++;
            if(top>bottom) break;
            //向下
            for(int i = top;i<=bottom;i++)
            {
                ans.push_back(matrix[i][right]);
            }
            right--;
            if(right<left) break;
            //向左
            for(int i = right;i>=left;i--)
            {
                ans.push_back(matrix[bottom][i]);
            }
             bottom--;
            if(bottom<top) break;
           // 向上
            for(int i = bottom;i>=top;i--)
            {
                ans.push_back(matrix[i][left]);
            }
            left++; 
            if(left>right) break;
        }
        return ans;
    }
};

image.gif

4.对称二叉树

题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

   1

  / \

 2   2

/ \ / \

3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

   1

  / \

 2   2

  \   \

  3    3

示例 1:

输入:root = [1,2,2,3,4,4,3]

输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]

输出:false

解题思路:这道题其实就是跟让我们判断A子树的左孩子是否与B子树的右孩子相等,并且A子树的右孩子是否与B子树的左孩子相等,如果相等,那么就是对称的。这里跟判断是否相同的树那道题类似。一开始的做的时候,我自作聪明地先找出这棵树的镜像,再判断这两棵树是否相等,但是做着做着我就发现,不用那么麻烦,因为这棵树的最一开始的根压根不用去判断,直接取它的左右子树当作树的镜像去判断就好了。

而且,我拿这棵树去造镜像的时候,发现,原本的树结构被我改变了。。。。我弄了半天。。。才发现这个问题,我吐了。

class Solution {
public:
    bool check(TreeNode* p,TreeNode* q)
    {
        if(p==nullptr && q==nullptr)
        {
            return true;
        }
        if(p==nullptr || q==nullptr)
        {
            return false;
        }
        if(p->val!=q->val)
        {
            return false;
        }
        return check(p->left,q->right) && check(p->right,q->left);
    } 
    bool isSymmetric(TreeNode* root) {
        if(root==nullptr)
        {
            return true;
        }
        return check(root->left,root->right);
    }
};

image.gif


相关文章
|
6月前
|
机器学习/深度学习 弹性计算 TensorFlow
在阿里云上打造强大的模型训练服务
随着人工智能技术的迅猛发展,模型训练服务变得愈发关键。阿里云提供了一系列强大的产品,使得在云端轻松搭建、优化和管理模型训练变得更加便捷。本文将详细介绍如何使用阿里云的相关产品构建高效的模型训练服务。
487 0
|
3月前
|
Python
模型训练
【8月更文挑战第20天】模型训练。
49 0
|
2月前
|
人工智能 自动驾驶 数据库
领域大模型的训练需要什么数据?
领域大模型的训练需要什么数据?
118 0
|
3月前
|
机器学习/深度学习
DNN模型训练
【8月更文挑战第9天】DNN模型训练。
29 1
|
3月前
|
机器学习/深度学习 自然语言处理 数据可视化
训练模型
【8月更文挑战第1天】
47 2
|
XML 数据挖掘 数据格式
|
6月前
|
机器学习/深度学习 人工智能 边缘计算
为何人们喜欢推理胜于训练大模型?
在AI和机器学习领域,越来越多的人转向重视推理而非大规模模型训练。推理的即时性和高效性使其在需要快速响应的场景中占优,如自然语言处理和图像识别。推理过程的可视化能帮助用户理解模型决策,便于调试和提升性能。此外,推理在边缘计算和移动设备上的应用降低了延迟和带宽成本,同时保护了用户隐私。相比于训练大模型的高资源消耗,推理更为节能且成本效益高,尤其在数据挖掘和新知识探索方面展现出创新潜力。推理在实际应用中与训练模型相结合,提供了性能与成本的有效平衡。随着技术进步,推理将在推动人工智能领域发展中发挥更大作用。
|
机器学习/深度学习 数据处理
训练多个epoch来提高训练模型的准确率
训练多个epoch来提高训练模型的准确率
247 0