算法
coderchem
这个作者很懒,什么都没留下…
展开
-
归并算法
假设我们现在有一组数组Array。现在我们把他分成两部分。和我们分别对2,1,4,8排序,和对5,7,3,6排序。在2,1,4,8中我们有分别把它分为两部分。5,7,3,6同理。2,1,4,8变成2,1和4,8。5,73,6变成5,7和3,6.然后将分出来的数比较大小,创建一个数组,把比较好的数保存起来。再赋给原数组。 接下看代码实现。packag...原创 2018-10-13 22:42:40 · 2537 阅读 · 0 评论 -
剑指offer之站的压入和弹出
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)import java.util.ArrayList;import java....原创 2019-03-02 09:03:56 · 85 阅读 · 0 评论 -
剑指offer之树的子结构
public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean result = false ; if(root1!=null && root2 != null){ //查找是否存在 if(root1.val==root2.val){ result = ...原创 2019-02-23 17:04:29 · 80 阅读 · 0 评论 -
剑指offer之合并两个链表
/* * * 代码的鲁棒性:考虑list1,list2是否为空,为空怎么样,不为空怎么样。 * 创建一个新的链表,用来存储新的链表。 * 比较节点值的大小,把节点赋给新的链表。 * 接下来都是一样的操作,用递归把下面的补充完整。 * */ public ListNode Merge(ListNode list1, ListNode list2) { if(li...原创 2019-02-23 16:37:02 · 101 阅读 · 0 评论 -
剑指offer之链表中到数第K个结点
public ListNode FindKthToTail(ListNode head,int k) { if(head == null || k<=0) return null; Stack<ListNode> stack = new Stack<ListNode>(); stack.add(head); while(head.next !=...转载 2019-02-23 14:12:43 · 102 阅读 · 0 评论 -
剑指offer之重建二叉树
package com.offer;public class 重建二叉树 { public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public TreeNode reConstructBinaryTree(int [] ...原创 2019-02-22 11:13:11 · 101 阅读 · 0 评论 -
01背包
package com.bag01;public class Bag01 { public void solution(int []weight,int []price,int n,int count){ /* * 创建一个数组,其中行便是物品, * 列表示背包可装下物品的剩余容量 */ int [][] max = new int [50][500]; /...原创 2018-12-11 11:22:43 · 100 阅读 · 0 评论 -
贪心算法之背包可拆
直接上代码:package com.贪心算法;import java.util.Iterator;import java.util.Scanner;public class Bag72 { public static void main(String[] args) { float[] price = new float[100]; //意见物品能产生的收益 float...原创 2018-12-06 16:06:56 · 274 阅读 · 0 评论 -
顺序表java实现代码
package com.List;public class SqList { private static final int MaxLength = 200; //可能出现的最大值 public Integer length = 0; //存放的实际长度 public Book[] arr ; //存放方式 public boolean InitList(SqLi...原创 2018-11-09 11:30:00 · 424 阅读 · 0 评论 -
按位取反符~
二进制数在内存中以补码的形式存储。按位取反:二进制每一位取反,0变1,1变0。~9的计算步骤:转二进制:0 1001计算补码:0 1001按位取反:1 0110转为原码:按位取反:1 1001 末位加一:1 1010符号位为1是负数,即-10 var x = 10;在计算机中一个整型数4字节,1字节8位,所以数字10在计算机中存储占32位,即0...转载 2018-11-06 15:06:49 · 706 阅读 · 0 评论 -
矩阵的环形打印和旋转
矩阵的环形打印思想是全局到微观,就是扣整个过程的共同点。假设有一个矩阵 arr { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, ...原创 2018-10-29 19:02:55 · 702 阅读 · 0 评论 -
栈和队列的相互转化
先看队列转化成栈的操作:首先需要准备两个队列,一个用来装数据(data),另一个用来辅助(help)。假设把以串数据进入到队列data中,例如:[1,2,3,4,5,6] 右边是第一个数。需要实现栈必定是后进先出。那么需要辅助队列,把[2,3,4,5,6]放入到help辅助队列中。然后把data队列中的[1]返回,在把队列help赋值给data队列完成一次出栈操作。代码:...原创 2018-10-28 16:59:40 · 1835 阅读 · 0 评论 -
简单数组转栈和队列
数组转栈对于数组转栈,首先要定义一个标记指针指针index指向栈的栈底,也就是数组的首部。根据栈的原理,压栈一次index+1.当压栈的数量等于数组长度,报错溢出。代码如下:package com.栈队组;public class Array_To_Stack{ /* * 数组转为栈。 * 定义一个数组,定义一个指针index。 * 建立一个方法setSize()...原创 2018-10-25 13:00:56 · 2084 阅读 · 0 评论 -
堆排序
对于堆,简单的来说就是一个完全二叉树。堆可以分为大根堆和小根堆。先看大根堆。大根堆就是在每一个子节点下都有最大的值放在节点上。小根堆就是每一个子节点的最小值放在节点上。 看下大根堆的实现代码 public static void Sort(int[] arr){ for (int i = 0; i < arr.length; i++) { ...原创 2018-10-16 16:47:34 · 2490 阅读 · 0 评论 -
根据荷兰国旗问题引出的快速排序
荷兰国旗问题:荷兰国旗有三横条块构成,自上到下的三条块颜色依次为红、白、蓝。现有若干由红、白、蓝三种颜色的条块序列,要将它们重新排列使所有相同颜色的条块在一起。本问题要求将所有红色的条块放最左边、所有白色的条块放中间、所有蓝色的条块放最右边。有一个数组,输入一个数num,把小于这个数的放左边,等于这个数的放在中间,大于这个数的放右边。假设有一个数组arr{12,3,2,4,2,6,4}...原创 2018-10-15 14:45:17 · 227 阅读 · 0 评论 -
桶排序
一、思想一句话总结:划分多个范围相同的区间,每个自区间自排序,最后合并。桶排序是计数排序的扩展版本,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过映射函数,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序,最后将非空桶中的元素逐个放入原序列中。桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效。二、图解过程...转载 2019-09-14 20:30:22 · 4140 阅读 · 0 评论