漫鱼

计科专业大学生

钢条切割——算法导论

自顶向下解法 分解:将长度为n的钢条切割问题转为在i下标切割后长度为n-1的子问题 解决:递归求解子问题,每次长度参数-1,在n=0即不用切时递归终止 合并: 1. 每个子问题的解+前一段切割长度的arr[i]值 成为前一子问题的最优解 2. 原规模问题中的最优解是所有子问题解中值最...

2018-04-26 11:15:56

阅读数:218

评论数:0

最大子数组问题——算法导论

分治法思想 分解:子数组一定被原数组左边或者右边包含,或者跨越原数组mid下标。 解决:前两种完全包含的情况形成子问题递归求解,并且缩小了问题规模,后一种是我们要解决的问题。 合并:剩余的问题是求跨越mid的最大子数组,并且从三种情况中选出和最大的。 另外 算导中伪代码返回的是三元组,这...

2018-04-25 22:12:10

阅读数:225

评论数:0

栈应用——括号匹配和逆波兰表达式

Stack声明见前文:https://blog.csdn.net/hanzheng6602/article/details/80053607 括号匹配 匹配串类似 “(()()abc{[]})” 思路:一个指针遍历串,如是左括号入栈,右括号则出栈并于当前指针比较是否匹配。再指针...

2018-04-25 12:23:41

阅读数:227

评论数:0

求解带环迷宫的最短路径

求解带环迷宫的最短路径 Stack和Position的声明请参考前文(栈走简单迷宫):https://blog.csdn.net/hanzheng6602/article/details/80053607 结果: 思路:和前文递归思路类似,只是为了解决绕环问题的话,需要对结点做个标记,用来更...

2018-04-23 18:01:11

阅读数:258

评论数:0

利用栈走迷宫

预备知识 前置声明头文件:https://blog.csdn.net/hanzheng6602/article/details/80031130 动态顺序表:https://blog.csdn.net/hanzheng6602/article/details/79917391 拓展:带环...

2018-04-23 17:31:09

阅读数:398

评论数:0

linux进程概念探究

程序和进程 MMU地址映射 进程的运行状态 PCB详解 进程标识符 查看进程状态的命令 环境变量和本地变量 内核的分类 程序和进程 程序:为完成一些任务的指令的有序集合 ​ 程序 = 代码 + 数据 ,size命令可以看到程序在内存空间的分配 进程: 对用户:...

2018-04-22 22:42:32

阅读数:237

评论数:0

c头文件包含——前置声明

现有两个.h文件maze.h,stack.h,还有一个stack.c。 maze.h #pragma once #include "stack.h" typedef struct position { int x; int y; }Posit...

2018-04-21 16:46:25

阅读数:252

评论数:0

带环链表求入口结点——带环链表处理

求两个单链表相交的交点— 链表不带环 判断链表是否带环,返回相遇点 获取环的入口点 判断两个链表是否相交,链表可能带环 求两个单链表相交的交点— 链表不带环 不带环的两个链表,只有两种情况。一种是平行也就是不相交,要不然就会相交形成Y型或者头尾相连的一字型。而只要相交,两个...

2018-04-19 16:55:14

阅读数:233

评论数:0

进程创建和替换——fork和exec

进程控制——fork和exec fork fork是UNIX系统中产生新进程的唯一办法 fork的作用是复制当前进程,生成子进程,子进程从fork的位置继续执行。fork函数的特点概括起来就是“调用一次,返回两次”,在父进程中调用一次,在父进程和子进程中 各返回一次。fork就像...

2018-04-17 11:06:05

阅读数:546

评论数:0

链表c实现——附相关面试题

链表c实现——附相关面试题 写链表全部需要注意的点 typedef 把链表结点指针类型重命名,pNode是结构体指针类型 在每一个方法里首先要处理非法数据,传入指针为空就可能造成崩溃 删除结点相关的方法里,要提前保存要删除的结点,防止内存泄漏,防止野指针 如果牵扯到可能改变头结点指向,就得传...

2018-04-16 09:34:00

阅读数:356

评论数:0

vim,gdb,makefile

vim练级 很棒的文章:https://www.jianshu.com/p/2f9ab65776d4 补充实用技巧: 多行注释:ctr + v 进入块可视化 再按 shift + i 输入 // + 两下esc,取消注释行选中//按 d 垂直分屏:冒号模式下vsp +file, ctr...

2018-04-15 11:11:50

阅读数:249

评论数:0

动态顺序表c语言实现

主要操作结构体中的指针,在init函数里对指针进行内存开辟,checkCapacity函数在每次插入之前检查一遍,如果可用空间没有了,就开辟当前最大容量的两倍。其他操作与静态顺序表无大区别。 seqList.h #pragma once #define DataType int ...

2018-04-12 17:37:31

阅读数:322

评论数:0

翻转单词顺序列——剑指offer

利用翻转函数,先对整串反转,再用pp和p两个指针判断单词的位置进行逐个反转。 细节处理要考虑串前面的空格,串中连续的多个空格,串的最后一个单词。 string reverse(string str, int left, int right) { if (left<...

2018-04-10 11:27:38

阅读数:229

评论数:0

数组中只出现一次的数字——剑指offer

经典的利用异或的性质的题目。 按num1和num2的异或结果,找到二进制最低位不相同的位置,把数组分成两组,每组必然只包含其中一个出现一次的数。 void FindNumsAppearOnce(vector<int> data, int* num1,...

2018-04-10 09:37:15

阅读数:217

评论数:0

数字在排序数组中出现的次数——剑指offer

书上写的是递归法,个人更喜欢循环写二分查找。 这道题给的有序数组第一思路是二分查找k,然后向两侧扫描找到起点终点,但这样时间复杂度是O (n). 巧妙地思路是两次二分查找,第一次找first第一次出现的下标,只需要把二分查找条件变一下就好了,第二次找last,最后返回last - first ...

2018-04-10 09:20:11

阅读数:271

评论数:0

左旋字符串——剑指offer

这道题用string简单了很多,而用c语言就涉及strcat和strcpy的运用。 第一种思路:循环移位n次,每次把第一个移到最后,O(n2). 第二种思路(最简):两个串拼接,取新串第n位开始数length个字符作为结果。 第三种思路:三次反转。 string LeftRotateS...

2018-04-09 21:55:03

阅读数:212

评论数:0

和为s的两个数字——剑指offer

和书上的问法不同,题目变为了积最小的两个数,用书上的思路最为简便,用两个指针,一个指头x,一个指尾y,若和等于s必然积最小。 证明:考虑x+y=C(C是常数),x*y = S, 求S最小。 y>=x 所以y-x = d >=0,即y=x+d, ...

2018-04-09 21:16:02

阅读数:220

评论数:0

和为S的连续正数序列——剑指offer

一个pp指针指向数列较小的数,p指向较大的数。若p到pp的和小于sum,就要p++,若大于sum就要p++,相等就记录要的结果并p++。 剑指offer上的方法有些复杂,原因应该是考虑了一般性的数列,比如不是连续的数列。 vector<vector&a...

2018-04-09 20:56:52

阅读数:229

评论数:0

简易通讯录c语言实现

主要用到的知识点 动态开辟内存,根据用户需要创建通讯录大小 练习结构体的声明定义使用 熟悉指针传参的过程,提高鲁棒性 add_list.h #pragma once #define _CRT_SECURE_NO_WARNINGS #define NAME 20 #define PHO...

2018-04-09 17:20:10

阅读数:308

评论数:0

尾递归与斐波那契三种解法

常规的斐波那契数列解法 int fib(int n) { if (n <= 2) { return 1; } else return fib(n - 1) + fib(n - 2); } 要求第n个斐波那契数,子...

2018-04-08 23:00:57

阅读数:387

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭