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;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章