数据结构
csdnlebin
这个作者很懒,什么都没留下…
展开
-
数据结构之红黑树
数据结构中常用的红黑树规则:1、每个节点不是黑色就是红色。2、根节点是黑色。3、红色节点的左、右子节点是黑色的。4、所有红色节点不能相连。5、任一个节点到其子树中每个叶子节点的路径上,都有相同数量的黑色节点。红黑树的三种变换:1、变颜色。2、左旋。3、右旋。变换规则:1、变颜色的情况:当前节点的父节点是红色,且它的祖父节点的另一个子节点(叔叔节点)也是红色。把父节点设为黑色。...转载 2019-06-01 22:00:52 · 145 阅读 · 0 评论 -
简单的洗牌和数组旋转
简单的洗牌方法 public int[] test(int[] a){ Random random = new Random(); int k = 0; for(int i=a.length-1; i>1; i--) { k = random.nextInt(i); a[i] = a[i]^a[k]; a[k] = a[k]^a[i]; a[i] = a...转载 2019-07-05 20:45:15 · 115 阅读 · 0 评论 -
数组前后两部分交叉排序
有一个数组包含2n个元素,例如:[a1,a2,…,an,b1,b2,…,bn],将该数组进行排序,排序结果如:[a1,b1,a2,b2,…,an.bn]。public void overlapsort(int[] n,int left,int right){ //如果仅有2个元素,直接返回 if(right - left == 1){ return; }...翻译 2019-07-15 15:53:53 · 651 阅读 · 0 评论 -
查找数组中第k个元素
查找第k个元素翻译 2019-07-11 10:42:37 · 811 阅读 · 0 评论 -
数组的交集和数组找不同
数组的交集,数组找不同翻译 2019-07-11 11:26:30 · 129 阅读 · 0 评论 -
查找链表的中间节点和找出有环链表的环开始节点
查找链表的中间节点、找出有环链表的环开始节点翻译 2019-07-15 16:56:03 · 285 阅读 · 0 评论 -
数组的逆序对个数
数组的逆序对个数翻译 2019-07-11 16:55:54 · 860 阅读 · 0 评论 -
链表部分反转
链表部分反转翻译 2019-07-18 11:42:12 · 1149 阅读 · 0 评论 -
最长连续子串的问题和数组的数字加1
一个仅包含a和b的数组,找出连续a的最大长度。public int test(String[] s){ int max = 0; int local = 0; for(int i=0; i<s.length; i++){ if(s[i] == 'a'){ local++; //如果字符是a,则字符串长度增加 }...翻译 2019-07-06 22:19:12 · 282 阅读 · 0 评论 -
找出两个链表的公共部分
找出两个链表的公共部分翻译 2019-07-17 11:02:58 · 1404 阅读 · 0 评论 -
九宫格的填法和数独的验证
九宫格public void test(int n){ int[][] magic = new int[n][n]; int t_row = 0; int t_col = 0; int row = n - 1; int col = n/2; magic[row][col] = 1; for(int i=2; i<n*n+1; i++)...转载 2019-07-05 15:47:05 · 848 阅读 · 0 评论 -
矩阵查找
有一个矩阵,每行都是有序的,每列也是有序的,要在这个矩阵中查找一个数字。例如:13571046810179121315191416182226该题,需要从14或者10开始查找,下面以14开始为例,如果要查找的值大于14,则继续向右查找,否则就向上查找,依次类推,直到找到或者不存在。...翻译 2019-07-10 16:32:42 · 579 阅读 · 0 评论 -
找数学表达式和汉诺塔问题
有2个数字a和b,a<=b,通过使a加1或者乘以2,找到一个合适的表达式,使结果等于bpublic String mytest(int a,int b){ //如果a等于b,直接返回a if(a==b){ return ""+a; } //如果b是奇数,则计算a和(b-1)的表达式,再加1 if(b % 2 == 1){ ...翻译 2019-07-07 19:50:01 · 388 阅读 · 0 评论 -
格雷码问题
格雷码public void graycode(int n){ //如果n等于零,直接返回 if(n == 0){ return; } //递归调用(n - 1) graycode(n - 1); //打印n System.out.println(""+n); //递归调用(n - 1) graycode(n...翻译 2019-07-07 20:55:11 · 504 阅读 · 0 评论 -
找出字符串的所有子串,包含空串
找出字符串的所有子串,其中包含空串 public List<String> test(String n){ //创建链表 List<String> list = new ArrayList<String>(); //首先将一个空串加到链表上 list.add(""); int len = n.length(); int len2 ...翻译 2019-07-07 22:06:38 · 1949 阅读 · 0 评论 -
在整数数组中找出和为目标值的数字组合
在一个整数数组(没有重复数字)中,找出和为目标值的数字 public String test(int[] n,int dest){ List<String> list = new ArrayList<String>(); List<String> tmp = new ArrayList<String>(); StringBuffer b...原创 2019-07-08 16:32:22 · 2922 阅读 · 1 评论 -
排序
排序算法翻译 2019-07-09 14:12:37 · 102 阅读 · 0 评论 -
在包含空字符的数组中查找某个值
包含空字符的数组中查找字符翻译 2019-07-10 13:37:34 · 334 阅读 · 0 评论 -
有序的无限数组中查找数字
在一个有序的数组中查找元素,数组长度是无限的 public int search(int[] n,int dest){ int left = 0; int mid = 0; int right = 1; //循环遍历,每次将间隔扩大2倍,直到找到找到比目标值大的元素位置 while(n[right] < dest){ left ...翻译 2019-07-10 14:52:45 · 503 阅读 · 0 评论 -
找出缺少的数字
有n个数字,它们的范围是[1,n],而且这些数字中没有重复的,现在缺少了一个数字,只有n-1个数字,怎么找出缺少的数字。该问题使用位运算的异或运算比较合适,也可以使用计数排序处理。异或运算的方法:public void test(){ int[] a = new int[]{1,2,3,4,5,6,7,9,10,11,8,13}; int i=1; for(; i&l...原创 2019-07-05 10:18:43 · 927 阅读 · 0 评论 -
房屋供暖问题
有一些房屋和供暖设备的位置,他们在一条直线上分布,需要计算供暖设备的最小供暖半径,我们可以看作数组进行处理,例如,房屋位置数组a[]{1,3,5,8,12,15,16,18,19,22},供暖设备位置b[]{12,19}我们找到每个房屋的最近的供暖设备,计算他们的距离,然后在所有房屋的这些距离中选取最大的值。public int search(){ int max = 0; ...翻译 2019-07-10 16:03:47 · 225 阅读 · 0 评论 -
链表排序
链表排序翻译 2019-07-17 11:53:42 · 90 阅读 · 0 评论