数据结构和算法
Leetcode刷题
双竹
这个作者很懒,什么都没留下…
展开
-
牛顿迭代(C语言非递归)
算法说明已经写在了代码里面,使用牛顿迭代需要一定的高数基础。如有bug,请各位大佬批评指正。原创 2023-08-20 17:46:15 · 67 阅读 · 1 评论 -
折半查找(C语言)
折半查找:当数组元素有序时,利用折半查找,时间复杂度为O(logN)。利用双指针,一个指向起点(left),一个指向终点(right)。定义mid等于(left+right)/2,向下取整(也可以向上,算法实现是一样的,但是做成二叉树的时候不一样,注意区分)。若mid的值等于要查找的值key则直接返回mid,若mid的值小于key则left=mid+1,否则right=mid-1。一直重复上面操作,直至找到目标。如有bug,请各位大佬批评指正~~~原创 2023-08-20 12:09:34 · 911 阅读 · 1 评论 -
并查集(c链表实现)
将需要加入集合中的元素的祖先的父亲指针指向被加入集合的祖先节点(这里比较绕,大家可以多读几遍。举个例子就是例如有节点p1和p2,现在将p2所在的集合加入到p1所在的集合中,那么就将p2集合中祖先的父亲节点指向p1所在集合的祖先)。第一步为路径压缩操作,即将集合中的节点直接指向祖先节点。第二步为查找操作,当节点的父亲指针指向自己时,直接返回自己,否则进行递归调用。并查集的主要用来判断集合的关系,利用树来模拟集合间的关系。初始化操作:将所有元素的父亲指针指向自己(也可以定义为NULL)。原创 2023-08-19 21:12:54 · 78 阅读 · 0 评论 -
删除数组中的重复元素(c语言)
解体思路:设置双下标i、j,j初始化在i后面,当a[i]=a[j]时j++,一直到不相等的时候,将a[j]的值赋值给a[i+1],当j>=length的时候结束。题目描述,对于给定的按照顺序排序的数组,删除其中重复的元素,并返回删除重复元素后的数组长度。比如对于数组[1,1,1,2,2,2,3,3,3,4,4]删除重复元素后的长度为4。如有问题请各位大佬批评指出~原创 2023-08-04 22:34:00 · 1977 阅读 · 1 评论 -
大数减法(C语言)
此时必定会出现再向前借位,即1会借位成为11,11会借位成为111(理解:例如11-22,11>22则第一个11中的第一个1一定会向前再借1,成为11再减2。这个时候其实原始数据增加了10的n次方,也即得到的结果多了一部分,需要将这一块减去。但是直接减又会出现小数减大数,因此利用相反数,用多出来的10的n次方减去最初的结果再加负号即可。操作利用递归进行完成,注意数组不要越界,控制被借位的数字位置大于等于0.如果第一个数据长直接操作即可,若第二个数据长,则输出的时候加负号即可。1.获取输入的两个数据的长度。原创 2023-08-06 11:20:43 · 973 阅读 · 1 评论 -
寻找数组的中心下标(中心值、C语言)
题目描述:给定一个数组,找出能使左右两边值之和相等的坐标。例如给定数组[1,2,3,4,5,1,2,3,4],则数组中心下标为5。给定数组[2,4,2,5,6,4,2,2,5],数组中心下标为5。给定数组[1],则中心下标为1(左右都为0)2.因为左边等于右边,则左边或者右边的两倍加上中心下标的值等于数组总和。注意这里左边或者右边是不带中心下标的值的,注意和上面的方法进行区分。1.中心下标的左边等于右边:为了便于编程和计算,在计算左边和右边时将中心下标本身的值也加进去。左右加同样的值,还是相等。原创 2023-08-12 10:35:37 · 215 阅读 · 1 评论 -
寻找数组中相邻的数据,使它们之和等于给定的值
双指针:设定i=0和j=1,设定初始值sum等于num[i],当sum值小于k时将num[j]加到sum中,j++,同理当sum值大于k时,将num[i]从sum中删除,同时i--。题目描述:给定一个整形数组,给一个特定的值k。找出数组中相邻的,使得值之和等于给定值的坐标。例如[1,2,3,4,5,6]和给定值10,则返回1和4。如有bug,请各位大佬批评指正~~原创 2023-08-06 17:29:57 · 47 阅读 · 1 评论 -
消除重复元素(消消乐、C语言)
给出一串字符串,删除重复元素。例如输入aabbc,输出c。输入abbccab,输出b。思路利用栈进行处理,将字符串压入栈,当栈顶元素和即将入栈的字符相同时,弹出栈顶元素。如有bug,请各位大佬批评指正~原创 2023-08-09 12:23:21 · 163 阅读 · 1 评论