leetcode -- 88、107

88.合并两个有序数组

题目描述

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

说明:

  • 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
  • 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]

解题方法

常规方法,

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
    int t = 0, j = 0;
    for (int i = 0; i < n ; i ++)     // 逐个比较
    {
        while ((nums2[i] > nums1[t]) && t < m+i) // 确定插入位置
            t ++;
        for (j = m + i; j > t; j--)         // 移动元素
            nums1[j] = nums1[j-1];
        nums1[t] = nums2[i];
    }
}

在这里插入图片描述

107.二叉树的层次遍历

题目描述

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:
给定二叉树 [3,9,20,null,null,15,7],
在这里插入图片描述

解题方法

来自题解

void visitTree( struct TreeNode * root , int depth , int * buffer , int * returnSize , int * len )
{
    if( *returnSize < depth + 1 )
        *returnSize = depth + 1;
    if( root -> left != NULL )
        visitTree( root -> left , depth + 1 , buffer , returnSize , len );
    if( root -> right != NULL )
        visitTree( root -> right , depth + 1 , buffer , returnSize , len );
    
    *( buffer + *len ) = root -> val;
    *( buffer + *len + 1 ) = depth;
    *len += 2;
}

int ** levelOrderBottom( struct TreeNode * root , int * returnSize , int ** returnColumnSizes )
{
    *returnSize = 0;
    if( root == NULL )
        return NULL;

    int * buffer = ( int * )malloc( sizeof( int ) * 1024 * 2 );
    int len = 0;

    visitTree( root , 0 , buffer , returnSize , &len );
    int ** data = ( int ** )malloc( sizeof( int * ) * ( *returnSize ) );
    *( returnColumnSizes + 0 ) = ( int * )malloc( sizeof( int ) * ( *returnSize ) ); 

    for( int i = 0 ; i < *returnSize ; i++ )
    {
        *( *( returnColumnSizes + 0 ) + i ) = 0;
        *( data + i ) = ( int * )malloc( sizeof( int ) * len );
    }

    for( int i = 0 ; i < len ; i += 2 )
    {
        int row = *returnSize - *( buffer + i + 1 ) - 1;
        *( *( data + row ) + *( *( returnColumnSizes + 0 ) + row ) ) = *( buffer + i );
        *( *( returnColumnSizes + 0 ) + row ) += 1;

    }
    free( buffer );
    return data;
}

在这里插入图片描述

发布了184 篇原创文章 · 获赞 253 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/williamgavin/article/details/104492319