算法
liudezhicsdn
这个作者很懒,什么都没留下…
展开
-
确定一个字符串的所有字符全都不同算法实现
首先要确认字符串的编码方式,是ASCII还是Unicode,这很重要。我们就当是ASCII来处理吧,如果不是的话,只需要扩大存储空间就可以了,其余逻辑都是一样的。算法一: 算法的中心思想是利用散列表的原理,先初始化一个数组,然后循环取出字符,将下标为此字符的ASCII值的位置置为true,如果将要存储的下标已经是true,则证明有重复的字符了,返回false。/** * 判断一个字符串是否各个字原创 2016-04-03 18:11:37 · 490 阅读 · 0 评论 -
找到满足条件的数组
给定函数d(n)=n+n的各位之和,n为正整数,如d(78)=78+7+8=93。这样这个函数可以看成一个生成器,如93可以看成由78生成。 定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出1至10000里的所有符合数A定义的数。 回答: 申请一个长度为10000的bool数组,每个元素代表对应的值是否可以有其它数生成。开始时将数组中的值都初始化为fal原创 2016-05-01 21:43:18 · 938 阅读 · 0 评论 -
对一个正整数n,算得到1需要的最少操作次数
实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。例子: func(7) = 4,可以证明最少需要4次运算 n = 7 n-1 6 n/2 3 n-1 2 n/2 1 要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述)原创 2016-05-01 20:46:55 · 2489 阅读 · 0 评论 -
树与图简单剖析
树二叉树和二叉查找树: 二叉查找树附加如下条件:对于任意节点,左子节点小于等于当前节点,当前节点又小于所有右子节点。平衡与不平衡: 许多树都是平衡的,但并非全部如此。如果树是不平衡的,应当从平均情况和最坏情况所需的时间来描述算法。注意,平衡一棵树只意味着子树的深度差不会超过一定值,并不表示左子树和右子树的深度完全相同。完满和完整: 完满和完整树的所有叶节点都在树的底部,所有非叶节点都有两个子节原创 2016-04-04 17:41:52 · 817 阅读 · 0 评论 -
栈与队列简单剖析
什么是栈? 和链表的问题一样,熟练掌握了数据结构的基本原理,栈与队列的问题处理起来要容易的多。当然,有些问题也可能相当棘手。、栈采用了后进先出(LIFO)顺序。实现一个栈public class Node { public Node(Node item) { next = item.next; data = item.data; } Node原创 2016-04-04 14:16:05 · 355 阅读 · 0 评论 -
找出单向链表中倒数第k个节点的算法
有两种方式,使用递归和非递归算法一(非递归方式): 最简单的方式是从头开始遍历。算法二(递归方式) 打印出第k个元素的值。 public static int nthToLast(LinkedListNode head,int k){ if(head == null){ return 0; } int i=nthToL原创 2016-04-04 03:00:43 · 473 阅读 · 0 评论 -
移除未排序链表中的重复节点算法实现
分析: 想要移除重复节点,首先要知道哪些节点是重复的。我们这里使用散列表解决这个问题。算法一 链表节点类public class LinkedListNode { LinkedListNode next = null;//指向的下一个链表 public int data;}删除重复节点方法 public static void deleteDups(LinkedListNode原创 2016-04-04 02:30:55 · 464 阅读 · 0 评论 -
链表简单剖析
何为链表?就是引用之前有先后顺序,元素之间通过持有其他引用的指针来完成有序的数据结构。 链表分为单向链表和双向链表。创建链表 定义一个链表节点类,和一个添加节点的方法。//链表对象class Node { Node next = null;//指向的下一个链表 int data;//值 public Node(int d) { data = d;原创 2016-04-04 00:15:11 · 214 阅读 · 0 评论 -
确定两个字符串通过重新排序是否可以相同的算法
首先要确定字母是否区分大小写,是否要考虑空白字符?算法一: 此算法主要使用了JDK已有排序功能来实现的,考虑了空白字符,也区分了大小写。/** * 判断两个字符串是否可以通过重新排序相等 * @author Administrator */public class CheckStringIsEquals { public static void main(String[] args原创 2016-04-03 22:20:45 · 533 阅读 · 0 评论 -
反转一个字符串的算法
这个功能在java的JDK中StringBuffer的父类已经实现了,实现代码如下(不相关代码已经省略):abstract class AbstractStringBuilder implements Appendable, CharSequence { /** * The value is used for character storage. */ char[原创 2016-04-03 19:22:32 · 404 阅读 · 0 评论 -
打印一段数字中的所有质数的算法
简单实现如下。 算法一: 这个算法的中心思想是循环所有需要判断的数字,然后逐一进行取模判断。public class IsPrime { public static void main(String[] args) { printPrimeNumber(3,100000); } public static void printPrimeNumber(int f原创 2016-04-03 18:26:48 · 328 阅读 · 0 评论 -
排序常用的三种算法
冒泡算法public static void sort(long[] arr) { long tmp = 0; for(int i=0;i<arr.length - 1;i++) { for(int j=arr.length - 1;j>i;j--){ if(arr[j]<arr[j-1]){ //进行交换原创 2016-05-15 22:32:32 · 633 阅读 · 0 评论