随笔分类 -  c_数据结构_算法

摘要:1. Java中的移位运算 有两个符号移动—— 符号左移:<< 符号右移:>> 这字面理解就是,带符号位的移动咯,左移很容易理解,空出来的低位补0就好,效果相当于乘以2 主要要区分的是——符号右移>> 和 无符号右移>>> 符号右移—— 保留符号位,然后右边数值位空出来的用符号的那个 值 来补 无符 阅读全文
posted @ 2020-02-13 16:51 汪神 阅读(228) 评论(0) 推荐(0)
摘要:看题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 我的直接思路: 用map计数,简单直接,遍历一次数组,用hashmap记录,k 阅读全文
posted @ 2019-05-04 21:00 汪神 阅读(280) 评论(0) 推荐(0)
摘要:在做一道剑指Offer的题的时候,有道题涉及到快排的思路,一开始就很快根据以前的思路写出了代码,但似乎有些细节不太对劲,自己拿数据试了下果然。然后折腾了下并记录下一些小坑,还有总结下划分方法partition的两种思路。 partition思路1——交换思路 以待排序数组的第一个元素为基准值key, 阅读全文
posted @ 2019-05-04 12:32 汪神 阅读(1639) 评论(0) 推荐(0)
摘要:直接上代码呵呵,里面有注解 阅读全文
posted @ 2019-04-21 14:10 汪神 阅读(551) 评论(0) 推荐(0)
摘要:题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 看题目脑子里就出现做法了: 遍历,用个HashMap来记录出现的次数,然后再遍历HashMap返回的EntrySet找出出现一次的数字搞定。 代码顺便上下吧: 然后看牛客网的讨论,原来可以用异或操作 阅读全文
posted @ 2019-04-07 00:40 汪神 阅读(480) 评论(0) 推荐(1)
摘要:蛮力: 遍历数组,对每个元素都往前遍历所有元素,如果有发现比它小的元素,就count++。 最后返回count取模。 结果没问题,但超时哈哈哈,只能过50%。 归并法: 看讨论,知道了这道题的经典做法应该是用归并的思想,之所以用归并,是因为像上面我们直接比较a[i]后面的所有元素的话,肯定是O(n^ 阅读全文
posted @ 2019-04-04 23:07 汪神 阅读(469) 评论(0) 推荐(0)
摘要:这是剑指第一次卡死我的题……记录一下 首先看题目: 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 一开始的思路: 一开始,我就直接蛮力,就按照它的描述,从2到根号 阅读全文
posted @ 2019-04-03 15:37 汪神 阅读(397) 评论(0) 推荐(0)
摘要:emm算法设计书上讲了个基于递归分治法的一个方法,大概思路就是把比如两位数的乘法需要4次乘法运算变成只需要2次。emm我感觉一般还没大到要分治法来什么吧,就直接写了个模拟笔算的方法。 看代码: 阅读全文
posted @ 2019-04-03 15:05 汪神 阅读(238) 评论(0) 推荐(0)
摘要:搞了个HeapSort类,有个类变量type确定是大顶堆还是小顶堆。 注意,用堆的时候处理的数组是0元素不用的!! 上代码: 阅读全文
posted @ 2019-04-03 14:54 汪神 阅读(138) 评论(0) 推荐(0)
摘要:在看HashMap源码的时候,涉及到红黑树,这个数据结构早已听闻大名,而且在学校的教材中没有讲这个数据结构,所以花了点时间去学习和理解这个数据结构。(比我想象中的复杂的多……) Red-Black Tree的简介 首先这是个二叉查找树,它属于但又不严格属于平衡二叉树(AVL),因为它没有像平衡二叉树 阅读全文
posted @ 2019-02-17 23:45 汪神 阅读(941) 评论(0) 推荐(0)
摘要:这是一道在leetcode上看到的题目 一开始,我能想到的思路是蛮力法: 就遍历每个字符,然后对每个字符都尝试从1到n的长度,看有没有回文串,并记录以该字符起始的回文串的最大长度。这个思路其实没有上手实现,因为和前面的那题求最大没有重复字符的substring的原始思路一样,时间复杂度是O(n^3) 阅读全文
posted @ 2019-01-23 23:23 汪神 阅读(171) 评论(0) 推荐(0)
摘要:算法思路来自博客:http://blog.csdn.net/wuruiaoxue/article/details/46797815 要判断一颗二叉树是否为完全二叉树,首先应该看一下完全二叉树的定义: 完全二叉树(来自数据结构课本的定义):约定从根起,自上而下,自左而右,给满二叉树中的每个结点从1到n 阅读全文
posted @ 2017-12-18 22:17 汪神 阅读(14430) 评论(0) 推荐(1)
摘要:利用栈的非递归先序遍历二叉树: 额,这个是我自己写的,可能算法有点啰嗦…… 利用栈实现非递归后序遍历二叉树: 这个是网上找的实现算法: 利用栈的非递归终须遍历二叉树在数据结构课本的p135上 阅读全文
posted @ 2017-12-07 13:11 汪神 阅读(525) 评论(0) 推荐(0)
摘要:思路图来自:https://www.cnblogs.com/fanwencong/p/5910503.html 这里我们依然用顺序表来实现这个排序算法。 顺序表一样是0号位不用。 这里我们的归并排序是二路归并,思路就是把序列一直分解成两份,直至分到子序列的长度为1,那么显然子序列已经有序,然后再不停 阅读全文
posted @ 2017-11-22 13:08 汪神 阅读(352) 评论(0) 推荐(0)
摘要:在学校的anyview的时候,遇到了这个题: 【题目】已知k阶裴波那契序列的定义为f(0)=0, f(1)=0, ..., f(k-2)=0, f(k-1)=1;f(n)=f(n-1)+f(n-2)+...+f(n-k), n=k,k+1,...试编写求k阶裴波那契序列的第m项值的函数算法,k和m均 阅读全文
posted @ 2017-10-30 20:40 汪神 阅读(973) 评论(0) 推荐(0)
摘要:插入排序的思想是,将序列分为两段序列,前面的序列是有序的,后面的是无序的,不断的将无序的序列中的元素往前面那个序列插入。 代码描述:(注意,这里的顺序表都是定义成0号位不用,那些接口adt也是相对应的,比如说初始化你传入的元素个数为6,其实开创的是7个元素的空间。) 希尔排序可以理解为普通插入排序的 阅读全文
posted @ 2017-10-27 15:47 汪神 阅读(167) 评论(0) 推荐(0)
摘要:在用visual studio实现数据结构上的一些结构与算法的时候,想在一个工程中建立几个文件,然后主文件可以使用其他文件的函数与变量(比如定义的结构体还有数据结构接口函数)。 我们可以利用头文件来做到这个: 比如说我们要实现直接插入算法,要用到顺序表这个数据结构。我们可以先在项目下写一个实现了顺序 阅读全文
posted @ 2017-10-26 21:57 汪神 阅读(104) 评论(0) 推荐(0)
摘要:为了更好地区分满队和空队,所以一般在设计队列的时候,留一个空位不存数据。也就是当你malloc分配数据的时候,malloc的size要比你那个maxSize(容量)大一个。 length: 因为当rear>=front时,length=rear-front。 但当rear<front时就比较麻烦了, 阅读全文
posted @ 2017-09-20 00:24 汪神 阅读(263) 评论(0) 推荐(0)
摘要:1.插入排序:资料来自: MoreWindows Blog() 直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。设数组为a[0…n-1]。 1. 初始时,a[0]自成1个有序区,无序区 阅读全文
posted @ 2017-03-09 23:26 汪神 阅读(498) 评论(0) 推荐(0)
摘要:注:该方法转自 李宁的极客世界 在做leetcode的时候遇到一道关于全排的题,于是去了解了有关的递归算法 思路: #include<stdio.h>int n=0;// 这里设置一个全局变量,用来记录有多少钟全排的情况int main(){ void swap(int *a,int *b); vo 阅读全文
posted @ 2017-02-09 14:50 汪神 阅读(349) 评论(0) 推荐(0)