算法学习
UnkonwnSource
奋斗吧少年,fight for the future!
展开
-
删除指定值的结点
Remove all elements from a linked list of integers that have value val.ExampleGiven: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6Return: 1 --> 2 --> 3 --> 4 --> 5public class原创 2016-01-08 22:04:26 · 657 阅读 · 0 评论 -
删除从后往前第n个结点
我的思路:递归至链表尾,然后向前增加至n,然后删除该结点。后面发现没那么简单。我刚开始写的程序如下:public ListNode deleteNth(ListNode head,int n){ if(head==null||head.next==null) return head; deleteNth(head.next,n); n--; if(n==0)head =原创 2015-12-24 17:45:57 · 461 阅读 · 0 评论 -
快速排序普通法与中值枢纽元法以及三切法
快速排序影响速度的一个因素便是枢纽元,在这里第一种方法为将第一个元素作为枢纽元,这样做有一个弊端,就是当顺序为逆序时或者大量重复的数时T(N) = O(N^2),方法一是中值枢纽法,即将第一个,中间的,和最后一个取中值,并将他们放在合适的位置,然后递归,这里有一点与普通法不同,i=left,j=right -1(中值法);i = left,j=right+1(普通法)且在最后的交换也不同!还有一点原创 2016-01-10 21:54:35 · 1081 阅读 · 0 评论 -
删除重复节点
Given a sorted linked list, delete all duplicates such that each element appear only once.For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3.Subscribe to see原创 2016-01-05 22:41:43 · 472 阅读 · 0 评论 -
链表反转
算法学习ing (leetcode)原创 2015-12-24 10:35:32 · 367 阅读 · 0 评论 -
找出两链表的交点
Write a program to find the node at which the intersection of two singly linked lists begins.For example, the following two linked lists:A: a1 → a2 ↘原创 2016-01-06 23:05:44 · 529 阅读 · 0 评论 -
判断链表是否回文?
Given a singly linked list, determine if it is a palindrome.思路:两个指针,一个正常递推,另一个递推速度为第一个的两倍(Node.next.next),到末,分两种情况:1.奇数个元素,最后快指针指向最后一个元素(p2.next=null);2.偶数个数,最后快指针指向null;若为奇数个数,将慢指针再向下移动一位,将该指针作为头节点原创 2016-01-04 22:56:54 · 437 阅读 · 0 评论 -
链接排好序的两个链表(类似于mergeSort)
题目:给定两个已知排好序的链表,将两链表链接,构成的新链表需要排好序思路:从链表开头比较结点大小,若第一条链表头节点值不大于第二条,将第一链表指针指向下一个,若第一条链表值大,将第二条链表指针指向下一个。最后将剩下未到末结点的链表链接到新链表!代码如下:/** * Definition for singly-linked list. * public class ListNode {原创 2016-01-03 22:16:15 · 418 阅读 · 0 评论 -
最小子序列--分治算法
package 程序测试专用;/* * 最小子序列,分治算法 */import java.util.Arrays;public class MinseqSum { public static int Minsum(int []a,int left,int right){ int MinLeftSum,MinRightSum; int leftBorder,rightBorde原创 2015-12-30 21:11:24 · 762 阅读 · 0 评论 -
2的1000次各位数的和
原理:2的1000次方用基本数据结构无法储存,所以想到用数组储存(链表也可以),我的思路:用足够大的数组(这里是1000),每个数组储存4个位数(也就是相当于10000进制大于9999时前面的数组加1)代码如下:package 程序测试专用;public class BinaryPlus { private final static int POW = 100000; pri原创 2016-01-01 22:14:18 · 563 阅读 · 0 评论 -
并查集的运用
coursera上Algotithms I的Assignment,用到了princeton大学提供的java库。目的:判断是否连通percolates,然后用蒙特卡洛模拟随机打开site直到连通,重复这个过程,然后计算得到值(约59.2%)原理:将顶部与底部设置一个虚拟的墙(顶部为0,底部为N*N+1)Union第一排与0和最后一排与N*N+1,若虚拟的墙与0联通则说明顶部与底部连原创 2016-01-28 21:22:01 · 1163 阅读 · 0 评论