• 【每日刷题】Day62


    【每日刷题】Day62

    🥕个人主页:开敲🍉

    🔥所属专栏:每日刷题🍍

    🌼文章目录🌼

    1. 852. 山脉数组的峰顶索引 - 力扣(LeetCode)

    2. 2806. 取整购买后的账户余额 - 力扣(LeetCode)

    3. 2415. 反转二叉树的奇数层 - 力扣(LeetCode)

    1. 852. 山脉数组的峰顶索引 - 力扣(LeetCode)

    //O(logN)思路:二分查找。根据题意,我们假设峰顶下标为ans。容易知道,对于每一个<ans的 i ,都满足arr[i]arr[i+1]。因此我们使用二分查找的思路就是定义一个left和right,开始分别指向数组头和尾,再定义一个mid(mid = (left+right)/2),mid根据lefth和right的变化而改变。

    //① 如果arr[mid]

    //② 如果arr[mid]>arr[mid+1],说明峰顶在当前mid下标处或者mid下标左侧,让right = mid-1,将mid向左挪动。

    int peakIndexInMountainArray(int* arr, int arrSize)

    {

        int ans = 0;

        int left = 0;

        int right = arrSize-1;

        while(left<=right)

        {

            int mid = (left+right)/2;//中间下标

            if(arr[mid]>arr[mid+1])//峰顶在mid处或者mid左侧

            {

                ans = mid;//记下当前下标,可能为峰顶

                right = mid-1;

            }

            else//这里没有记下当前下标,因为是二分查找,只需要记一边即可

                left = mid+1;//峰顶在mid右侧

        }

        return ans;

    }

    2. 2806. 取整购买后的账户余额 - 力扣(LeetCode)

    //思路:遍历取小值。

    int accountBalanceAfterPurchase(int purchaseAmount)

    {

        int num = 0;

        int flag1 = 0;

        int flag2 = 0;

        for(int i = 0;i<=10;i++)

        {

            if(num

                num+=10;

            else

            {

                flag1 = num-10;//90

                flag2 = num;//100

                break;

            }

        }

        int ans = (abs(flag1-purchaseAmount)

        return 100-ans;

    }

    3. 2415. 反转二叉树的奇数层 - 力扣(LeetCode)

    //思路:暴力求解。首先层序遍历将二叉树中的值存入数组中,因为是完美二叉树,因此我们很容易可以知道二叉树奇数层在数组中的区域。对数组中属于二叉树奇数层区域的数据进行翻转。翻转后的数组再进行层序遍历存回二叉树中。

    typedef struct TreeNode TN;


     

    typedef struct listnode

    {

        struct TreeNode* val;

        struct listnode* next;

    }LN;

    struct TreeNode* reverseOddLevels(struct TreeNode* root)

    {

        int* arr = (int*)malloc(sizeof(int)*20000);

        int count = 1;

    //层序遍历存入数组↓↓↓

        LN* phead = (LN*)malloc(sizeof(LN));

        LN* ptail = phead;

        LN* node = (LN*)malloc(sizeof(LN));

        node->val = root;

        node->next = NULL;

        ptail->next = node;

        ptail = ptail->next;

        while(phead!=ptail)

        {

            struct TreeNode* tmp = phead->next->val;

            phead = phead->next;

            arr[count++] = tmp->val;

            if(tmp->left)

            {

                LN* node = (LN*)malloc(sizeof(LN));

                node->val = tmp->left;

                node->next = NULL;

                ptail->next = node;

                ptail = ptail->next;

            }

            if(tmp->right)

            {

                LN* node = (LN*)malloc(sizeof(LN));

                node->val = tmp->right;

                node->next = NULL;

                ptail->next = node;

                ptail = ptail->next;

            }

        }

    //层序遍历存入数组↑↑↑

    //数组翻转↓↓↓

        int flag = 2;

        while(flag

        {

            int flag1 = flag*2-1;

            int flag2 = flag1;

            while(flag

            {

                int tmp = arr[flag];

                arr[flag] = arr[flag1];

                arr[flag1] = tmp;

                flag++;

                flag1--;

            }

            flag = (flag2+1)*2;

        }

    //数组翻转↑↑↑

    //层序遍历回放二叉树↓↓↓

        LN* phead1 = (LN*)malloc(sizeof(LN));

        LN* ptail1 = phead1;

        LN* node1 = (LN*)malloc(sizeof(LN));

        node1->val = root;

        node1->next = NULL;

        ptail1->next = node1;

        ptail1 = ptail1->next;

        int count1 = 1;

        while(count1

        {

            struct TreeNode* tmp = phead1->next->val;

            phead1 = phead1->next;

            tmp->val = arr[count1++];

            if(count1left)

            {

                LN* node = (LN*)malloc(sizeof(LN));

                node->val = tmp->left;

                node->next = NULL;

                ptail1->next = node;

                ptail1 = ptail1->next;

            }

            if(count1right)

            {

                LN* node = (LN*)malloc(sizeof(LN));

                node->val = tmp->right;

                node->next = NULL;

                ptail1->next = node;

                ptail1 = ptail1->next;

            }

        }

        return root;

    }

  • 相关阅读:
    暑期多校赛
    MongoDB使用Template查询数据
    解决Mac配置maven环境后,关闭终端后环境失效的问题(适用于所有终端关闭后环境失效的问题)
    Docker 容器编排技术解析与实践
    python返回多个值与赋值多个值
    向npm发包
    python文件打包分发方法
    算法刷题-哈希表-有效的字母异位词
    [附源码]计算机毕业设计springboot基于Web的绿色环保网站
    Leetcode刷题详解——将x减到0的最小操作数
  • 原文地址:https://blog.csdn.net/2301_78022459/article/details/139609804