数据结构-NOJ-07-表达式括号匹配


这道题。。。卡了我好长时间,再次认识到了C++的功底不足...

此篇文章讲述的是编译器的编译时间的问题。此题时间复杂度O(n)

由于一些细节的原因而造成了编译器效率低下,调试的时候卡的跟吃了翔一样,求提交代码时一直TE的心理阴影面积TAT

首先上错误代码(效率低下,没有解决问题):

#include <iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;

#define MAXSIZE 100+10
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;
typedef char SElemType;

typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
}Stack;

void InitStack(Stack &S)
{
    S.base = new SElemType[MAXSIZE];
    if(!S.base)
        exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=MAXSIZE;
}



Status StackEmpty(Stack S)
{
    if(S.top==S.base)
        return TRUE;
    else
        return FALSE;
}




Status GetTop(Stack S)
{
    if(S.top != S.base)
        return *(S.top-1);
    else
        return ERROR;
}
### 数据结构 NOJ 在线判题算法练习 NOJ 是一个在线编程平台,提供多种数据结构和算法题目供学习者实践。以下是关于 NOJ 平台上的常见数据结构问题及其解决方法。 #### 一、顺序表的插入操作 对于顺序表的插入运算,在实现过程中需要考虑数组的空间分配以及元素移动等问题。通过遍历顺序表并找到合适的位置完成插入操作是一个常见的做法[^1]: ```python def insert_element(list, index, value): if index >= len(list) or index < 0: return False for i in range(len(list)-1, index-1, -1): list[i+1] = list[i] list[index] = value return True ``` 上述代码展示了如何在指定位置 `index` 插入新元素 `value` 的逻辑。 --- #### 二、建立二叉树的二叉链表存储结构 构建一棵二叉树通常涉及定义节点结构体,并基于输入序列创建对应的树形结构。以下为典型的 C++ 实现方式[^2]: ```c++ typedef struct Node { char val; struct Node* left; struct Node* right; } Node; // 创建单个节点函数 Node* create_node(char c){ Node* newnode = (Node*)malloc(sizeof(Node)); newnode->val = c; newnode->left = NULL; newnode->right = NULL; return newnode; } ``` 此部分实现了基本的节点定义及动态内存分配功能。 --- #### 三、每日温度计算问题 针对给定的一组气温列表,求解每个日期之后第一个更高温的日子索引差值可以采用栈来优化时间复杂度至 O(n)[^3]。具体实例如下: ```cpp #include <vector> using namespace std; vector<int> dailyTemperatures(vector<int>& temperatures) { int n = temperatures.size(); vector<int> res(n); stack<int> stk; for(int i=0;i<n;++i){ while(!stk.empty() && temperatures[i]>temperatures[stk.top()]){ int preIndex = stk.top(); stk.pop(); res[preIndex]=i-preIndex; } stk.push(i); } return res; } ``` 该解决方案利用单调递减栈记录待处理天数的信息,从而快速定位满足条件的结果。 --- #### 四、三数之和小于目标值 寻找所有可能组合使得三个整数相加结果严格低于设定的目标数值,则需注意去重与边界情况控制。Python 版本如下所示: ```python class Solution(object): def threeSumSmaller(self, nums, target): count = 0 nums.sort() for k in range(2, len(nums)): i,j = 0,k-1 while i<j: total_sum = nums[i]+nums[j]+nums[k] if total_sum<target: count += j-i i+=1 else: j-=1 return count ``` 这里运用双指针技巧降低嵌套循环带来的性能开销。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值