难度中等
101
给你一个数组 target 和一个整数 n。每次迭代,需要从 list = { 1 , 2 , 3 ..., n } 中依次读取一个数字。
请使用下述操作来构建目标数组 target :
- "Push":从
list 中读取一个新元素, 并将其推入数组中。
- "Pop":删除数组中的最后一个元素。
- 如果目标数组构建完成,就停止读取更多元素。
题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。
请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。
示例 1:
输入:target = [1,3], n = 3
输出:["Push","Push","Pop","Push"]
解释:
读取 1 并自动推入数组 -> [1]
读取 2 并自动推入数组,然后删除它 -> [1]
读取 3 并自动推入数组 -> [1,3]
示例 2:
输入:target = [1,2,3], n = 3
输出:["Push","Push","Push"]
示例 3:
输入:target = [1,2], n = 4
输出:["Push","Push"]
解释:只需要读取前 2 个数字就可以停止。
来源:力扣(LeetCode)
一开始看了很久才明白题意,它是确保数组中的元素是单调递增的,同时入数组的数是从1到n进行一个栈的方式存储。想明白后依照题意,就只需判断当前n和当前数组的一个大小,然后存储push或者pop即可。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char ** buildArray(int* target, int targetSize, int n, int* returnSize)
{
char **ch=(char **)malloc(sizeof(char *)*2*n);
int num=1,count=0;
for(int i=1,k=0;i<=n&&k<targetSize;i++)
{
ch[count]=(char *)malloc(8);
if(target[k]==i)
{
strcpy(ch[count++],"Push");
num++;
k++;
}
else
{
ch[count]=(char *)malloc(8);
strcpy(ch[count++],"Push");
ch[count]=(char *)malloc(8);
strcpy(ch[count++],"Pop");
}
}
*returnSize=count;
return ch;
}
难度中等
440
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
示例 1:
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4), pop() -> 4,push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
这道题比较简单,只需要将前数组进行入栈,然后判断后数组与栈中元素是否相同进行一个出栈即可;
bool validateStackSequences(int* pushed, int pushedSize, int* popped, int poppedSize)
{
int s[pushedSize],top=0,pop=0;
for(int i=0;i<pushedSize;i++)
{
s[top++]=pushed[i];
while(top>0&&popped[pop]==s[top-1]&&pop<poppedSize)
top--;
pop++;
}
return (top==0);
}
今天对项目进行了一个框架整理:
打算写一个超市物品管理系统,并用线索化二叉树来进行存储数据
列了一个大纲,对各个子函数进行分布实现并补充;
看了csdn上的项目,感觉还是对其实现有点模糊有点模糊,害得在进行梳理。
//定义物品结构体,包含编号、名称、进货时间、货架位置等信息。
struct Goods
{
int id;
char name[20];
char purchaseTime[20];
char shelf[10];
};
//定义节点结构体,包含指向左右子树的指针、节点数据、以及是否为线索的标记。
struct Node
{
struct Node* left;
struct Node* right;
struct Goods data;
int leftTag;
int rightTag;
};
struct Node* root = NULL; //根节点指针
void createTree(); //创建二叉树
void xiansuohua_tree(struct Node* p); //线索化二叉树
struct Node* findNode(int id); //按编号查找节点
struct Node* inOrderSearch(char name[]); // 按名称查找节点
void insert_Node(); //插入新节点
void delete_Node(); //删除节点
void add_huowu(); //添加货架
void delete_huowu(); //删除货架
void change_sheft(); //修改货架
void show_huowu(); //显示所有货架
void purchase_huowu(); //进货
void sell_huowu(); //出货
void print_caidan(); //打印主菜单