<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[csdner1998的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/csdner1998</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; csdner1998]]></copyright><item><title><![CDATA[from sys import argv]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/120817427</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/120817427</guid><author>csdner1998</author><pubDate>Sun, 17 Oct 2021 22:26:02 +0800</pubDate><description><![CDATA[sys 为内置模块，提供了许多函数和变量来处理 Python 运行时环境的不同部分。是固定的用法，不能自己随便写名字代替它，这行的作用就是要把用到的东西（比如需要什么特定函数什么之类的）从这个东西存放的模块中引入程序中。

就好比C语言中的strlen()函数、strcat()函数（、strcmp()函数等等，需要写入头文件#include&lt;string.h&gt;预处理命令。经过预处理后，这几个函数才能用。

argv就是列表（参数变量），是编程术语。在解释器启动后, argv 列表包含了传递给脚本]]></description><category></category></item><item><title><![CDATA[lesson 21 按递增次序输出单链表中各结点的数据元素，并释放结点所占的存储空间]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108861071</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108861071</guid><author>csdner1998</author><pubDate>Tue, 29 Sep 2020 07:34:08 +0800</pubDate><description><![CDATA[思路：

套用删除最小值的模版，加一个输出语句即可。

代码：


void increasePrint(LNode* &amp;L){
   while(L-&gt;next){//循环到只剩头结点，别忘了这句！！！
        LNode *p=L-&gt;next,*pre=L;
        LNode *minp=p,*minpre=pre;
        while(p){
            if(p-&gt;data&lt;minp-&gt;data){
            ]]></description><category></category></item><item><title><![CDATA[lesson20 有一个带头结点的单链表L，设计一个算法使其元素递增有序。]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108838200</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108838200</guid><author>csdner1998</author><pubDate>Sun, 27 Sep 2020 22:36:14 +0800</pubDate><description><![CDATA[思想：

直接插入排序算法

代码：


void sort(LinkList * &amp;L){
	LinkList *p,*pre,*r;
	p = L-&gt;next-&gt;next;		// 先保存下L的第二个元素，因为下一步要将L变成只有一个元素的有序表； p指针用来遍历无序区 
	L-&gt;next-&gt;next = NULL;	// 将L变成只有一个元素的有序表
	// 从L的第二个元素开始遍历整个L直至表尾 
	while(p != NULL){
		r = p-&gt;next]]></description><category></category></item><item><title><![CDATA[lesson19-3 以孩子兄弟链表为存储结构，请设计递归和非递归算法求树的深度]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108187378</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108187378</guid><author>csdner1998</author><pubDate>Sun, 23 Aug 2020 19:49:02 +0800</pubDate><description><![CDATA[思路：

firstchild对应lchild

nextsibling对应rchild

其他操作和普通二叉树的操作一样

代码：


int getHeight(BTNode *t){//递归算法
	if(!t)
		return 0;
	int hc=getHeight(t-&gt;firstchild);
	int hs=getHeight(t-&gt;nextsibling);
	return (hc+1)&gt;hs?hc+1:hs;
}

int getHeight_(BTNode *t){/]]></description><category></category></item><item><title><![CDATA[lesson19-2 《数据结构与算法》P35Q36拆分单链表]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108187325</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108187325</guid><author>csdner1998</author><pubDate>Sun, 23 Aug 2020 19:45:46 +0800</pubDate><description><![CDATA[题目描述：

编写算法将单链表L1拆成两个表，其中以L1为头的链表保持原来向后的链接，另一个以L2为头的链表，其链接方向与L1相反，L1包含原链表的奇数序号结点，L2包含原链表的偶数序号结点。

思路：

对一个链表进行部分逆置或其他操作时，可以用 i 来保存结点的序号，更简便。

代码：


void breakList(LNode *L1){
	int i=0;//i表示结点序号
	LNode *L2=new LNode();//L2为偶数序号链表，L1为奇序号链表
	L2-&gt;next=NULL;]]></description><category></category></item><item><title><![CDATA[lesson19-1 写作业的学生人数]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108187279</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108187279</guid><author>csdner1998</author><pubDate>Sun, 23 Aug 2020 19:39:59 +0800</pubDate><description><![CDATA[题目描述：

在既定时间做作业的学生人数
给你两个整数数组 startTime（开始时间）和 endTime（结束时间），并指定一个整数 queryTime 作为查询时间。

已知，第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。

请返回在查询时间 queryTime 时正在做作业的学生人数。形式上，返回能够使 queryTime 处于区间 [startTime[i], endTime[i]]（含）的学生人数。

代码：


//querytime介于开始时]]></description><category></category></item><item><title><![CDATA[lesson18-3 计算二叉树的WPL。]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108159352</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108159352</guid><author>csdner1998</author><pubDate>Fri, 21 Aug 2020 22:16:05 +0800</pubDate><description><![CDATA[思路：

递归思想，先序遍历框架。

代码：


int WPL=0;
int preOrder(BTNode *root,int level){//先序遍历框架
	if(root){
		if(root-&gt;left==NULL&amp;&amp;root-&gt;right==NULL)//如果是叶结点，累计WPL
			WPL+=level*root-&gt;weight;
		if(root-&gt;left!=NULL)
			preOrder(root-&gt;left,level+1);
]]></description><category></category></item><item><title><![CDATA[lesson18-2 《数据结构与算法》P37Q58]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108159225</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108159225</guid><author>csdner1998</author><pubDate>Fri, 21 Aug 2020 22:12:28 +0800</pubDate><description><![CDATA[题目描述：

设有一个正整数序列组成的有序单链表（按递增次序有序），完成下列功能。（要求用最少的时间和最小的空间）

（1）确定在序列中比正整数x大的数有几个，相同的数只计算一次。

（2）在单链表中将比正整数x小的数按递减次序排列

（3）将比正整数x大的偶数从单链表中删除。
...]]></description><category></category></item><item><title><![CDATA[lesson18-1 杨辉三角]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108154549</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108154549</guid><author>csdner1998</author><pubDate>Fri, 21 Aug 2020 19:28:03 +0800</pubDate><description><![CDATA[题目描述：

二项式展开式的系数为

C（n，0）=1，C（n，n）=1,对于n0

C（n,k）=C(n-1,k)+C(n-1,k-1),对于0&lt;k&lt;n

其形成著名的杨辉三角。

（1）试写一个递归算法，根据上式生成C(n,k).

（2）试写一个非递归算法，既不用数组也不用栈，对于任意的0kn，计算C（n,k）
...]]></description><category></category></item><item><title><![CDATA[lesson17-4 孩子分糖果]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108154462</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108154462</guid><author>csdner1998</author><pubDate>Fri, 21 Aug 2020 19:19:50 +0800</pubDate><description><![CDATA[题目描述：
给你一个数组candies和一个整数extraCandies，其中candies[i]代表第 i 个孩子拥有的糖果数目。
对每一个孩子，检查是否存在一种方案，将额外的extraCandies个糖果分配给孩子们之后，此孩子有 最多的糖果。注意，允许有多个孩子同时拥有 最多的糖果数目。

思想：

贪心算法。

代码：


void getMaxCandies(int candies[],int extra,int length)
{
	char res[MAXSIZE]={};...]]></description><category></category></item><item><title><![CDATA[lesson17-3 合并二叉树]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108154367</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108154367</guid><author>csdner1998</author><pubDate>Fri, 21 Aug 2020 19:17:05 +0800</pubDate><description><![CDATA[题目描述：

给定两个二叉树，想象当将它们中的一个覆盖到另一个上时，两个二叉树的一些节点便会重叠。需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠，那么将他们的值相加作为节点合并后的新值，否则不为 NULL 的节点将直接作为新二叉树的节点。

思路1：

将两棵树合并到第一棵树上，破坏原来的树。

代码1：


//先序模板
BTNode* mergeBitree(BTNode *t1,BTNode *t2){
	if(t1==NULL)
		return t2;
	if(t2==NULL)
	]]></description><category></category></item><item><title><![CDATA[lesson17-2 《数据结构与算法》P37Q55]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108154248</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108154248</guid><author>csdner1998</author><pubDate>Fri, 21 Aug 2020 19:11:53 +0800</pubDate><description><![CDATA[题目描述：

设有一个由正整数组成的无序（向后）单链表，编写完成下列功能的算法：

（1）找出最小值结点，且打印该数值。

（2）若该数值是奇数，则将其与直接后继结点的数值交换。

（3）若该数值是偶数，则将其直接后继结点删除。

代码：


void swapOrDelete_(LNode *L){//函数分解思想
	LNode* min=findMinNode(L);//不知道最小值data是哪个节点	=&gt; 我去拿这个节点=&gt;函数要返回一个结点的指针
	if(min==NULL){
		co]]></description><category></category></item><item><title><![CDATA[lesson17-1 返回数组中两个最大数值的乘积]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108154095</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108154095</guid><author>csdner1998</author><pubDate>Fri, 21 Aug 2020 19:03:20 +0800</pubDate><description><![CDATA[题目描述：

给出一个整数数组 nums，请选择数组的两个不同下标 i 和 j，使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请你算并返回该式的最大值，其中nums[i]为正数（最好使用两种思路方法来完成）



思路1：

将整个数组按照递增有序进行排序，拿到第一大和第二大的数。

思路2：

直接找到最大的两个数。

代码1：


int getMaxValue1(int nums[],int length){//将数组进行递增有序排序，返回最大值与第二大值的乘积
	bubbleS.]]></description><category></category></item><item><title><![CDATA[lesson10-1 实现冒泡算法]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108096215</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108096215</guid><author>csdner1998</author><pubDate>Wed, 19 Aug 2020 11:14:05 +0800</pubDate><description><![CDATA[代码：


void bubbleSort(int a[],int length){
	int flag;
	for(int i=length-1;i&gt;=1;--i){
		flag=0;
		for(int j=1;j&lt;=i;j++){
			if(a[j-1]&gt;a[j]){
				swap(a[j-1],a[j]);
				flag=1;
			}
		}
	}
	if(flag==0)
		return;
}

void swap(int &amp;a,int &amp;b){
]]></description><category></category></item><item><title><![CDATA[lesson14-1 买入股票的最佳时机]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108095935</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108095935</guid><author>csdner1998</author><pubDate>Wed, 19 Aug 2020 11:10:18 +0800</pubDate><description><![CDATA[题目描述：

给定一个数组，它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易（多次买卖一支股票）。

注意：你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。

示例 1:

输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 3 天（股票价格 = 5）的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后，在第 4 天（股票价格 = 3）的时候买入，在第 5]]></description><category></category></item><item><title><![CDATA[lesson16-1 桌上有 n 堆硬币，每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆，拿走其中的一枚或者两枚，求拿完所有硬币的最少次数。]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108040004</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108040004</guid><author>csdner1998</author><pubDate>Sun, 16 Aug 2020 18:13:29 +0800</pubDate><description><![CDATA[代码1：


int getMinCount(int coins[],int length){
	int res=0;
	for(int i=0;i&lt;length;i++){
		res+=(coins[i]+1)/2;
	}
	return res;
}

代码2：


int getMinCount1(int coins[],int length){
	int res=0;
	for(int i=0;i&lt;length;i++){
		if(coins[i]%2!=0)
			res+=coi]]></description><category></category></item><item><title><![CDATA[lesson16-3 给定一个二叉树，计算整个树的坡度。 一个树的节点的坡度定义即为，该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。 整个树的坡度就是其所有节点的坡度之和]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108039436</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108039436</guid><author>csdner1998</author><pubDate>Sun, 16 Aug 2020 18:06:39 +0800</pubDate><description><![CDATA[题目描述：

给定一个二叉树，计算整个树的坡度。
一个树的节点的坡度定义即为，该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。
整个树的坡度就是其所有节点的坡度之和。

思路：

求结点和左右子树的累和值，后续遍历框架，顺便求出坡度

代码：


int getIncline(BTNode *t){
	if(!t)
		return 0;
	int sum=0;
	calcTilt(t,&amp;sum);
	return sum;
}
int calcTilt(BTNode *t,]]></description><category></category></item><item><title><![CDATA[lesson16-1 《算法与数据结构》P35Q40]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108039030</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108039030</guid><author>csdner1998</author><pubDate>Sun, 16 Aug 2020 17:39:18 +0800</pubDate><description><![CDATA[题目描述：

线性表中元素递增有序且按顺序存储与计算机内。要求设计一算法完成：

（1）用最少时间在表中查找数值为x的元素

（2）若找到将其与后继元素位置交换

（3）若找不到，将其插入表中并使表中元素仍递增有序

思路：

用二分查找法进行查找，时间复杂度为O（logn）。



代码：


int flag=0;//默认没找到元素x
void swapOrInsert(int a[],int &amp;length,int low,int high,int x){
	int index=halfSe.]]></description><category></category></item><item><title><![CDATA[lesson15-3 给定一棵二叉搜索树，请找出其中第k大的结点。]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108011845</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108011845</guid><author>csdner1998</author><pubDate>Fri, 14 Aug 2020 18:55:41 +0800</pubDate><description><![CDATA[思路：

用RTL（右子树→根结点→左子树）的遍历方法，得到一个递减有序的序列，第K-1个数据元素即为第k大的结点。

或者用中序遍历，得到一个递增序列，输出第 length-k+1 个数据元素即为第k大的结点。

代码：


int arr[MAXSIZE]={};//全局变量，创建数组接收递减序列
int length=0;

int searchKthNode(BTNode *t,int k){
	traversal(t);
	return arr[--k];
}

void traversal(BT]]></description><category></category></item><item><title><![CDATA[lesson15-2 实现一种算法，删除单向链表中间的某个节点（即不是第一个或最后一个节点），假定只能访问该节点。]]></title><link>https://blog.youkuaiyun.com/csdner1998/article/details/108011797</link><guid>https://blog.youkuaiyun.com/csdner1998/article/details/108011797</guid><author>csdner1998</author><pubDate>Fri, 14 Aug 2020 18:48:58 +0800</pubDate><description><![CDATA[思路：

在无法得到前驱结点的情况下删除某个指定结点，将后继结点的值赋给要删除的结点，然后删除这个后继元素即可。

这也是一种删除方法，但用的少。

代码：


void deleteNode(LNode*&amp;p){//待删除结点p
	LNode *q=p-&gt;next;
	p-&gt;data=q-&gt;data;
	p-&gt;next=q-&gt;next;
	free(q);
}

测试：


#include&lt;stdio.h&gt;
#include &lt;stdlib.h&g]]></description><category></category></item></channel></rss>