
算法
小王没有BUG
对Java以及网络编程感兴趣,专注技术学习与分享,也欢迎加我微信交流(微信号voidCC7929)
展开
-
不引入第三个变量交换两个变量的值
据我所知有两种办法:1、算术运算: int a = 10; int b = 12; a = a+b; // a = 10+12 = 22 b = a-b; //b = 22-12 = 10 a = a - b; // a = 22-10 = 12 交换成功2、位运算: int a =...原创 2019-04-20 17:39:58 · 2049 阅读 · 0 评论 -
LeetCode(2)-- 两数相加--Java实现
问题描述:给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。思路:因为两个链表遍历时是从各位开始,而且最后输出的链表也是从个位开始,因此,我们可以每次顺序两个链表遍历一个节...原创 2019-06-18 18:47:40 · 831 阅读 · 0 评论 -
LeetCode(3)--无重复字符串的最长子串--Java实现
题目描述:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。思路:1.暴力解法:尝试计算每一种子串是否有重复,如果没有重复,记录其长度,记录最长的一个不重复子串,这个解法显然不是好的解法.这里就不介绍了.2.滑动窗口:通过一个可以移动的窗口(i,j),起始时i=j=0,j依次递增遍历到的字符,如果该字符未出现过,保存在一个HashSet里面,记录此时的长度,更...原创 2019-06-19 12:10:27 · 395 阅读 · 0 评论 -
递归递归实现二分查找/java语言
import java.util.Scanner;//递归二分查找public class Re5 { public static void main(String args[]){ Scanner input = new Scanner(System.in); System.out.println("请输入一个数字 n ,用于建立一个长度为n的...原创 2018-06-13 15:24:52 · 542 阅读 · 0 评论 -
排序算法--冒泡排序--java实现
冒泡排序算法之JAVA实现冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。解决的是排序问题:输入:一个待排序的数组输出:排好序的数组算法思想:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。(这是百度...原创 2018-09-26 00:10:00 · 234 阅读 · 0 评论 -
归并排序(合并排序)Java实现
归并排序Java实现归并排序是时间复杂度最低的排序算法,效率十分高,(其他排序,可见我的其他博文)/*** 归并排序* 算法思想:*用分治的思想,不断把原来的数组分割为原来的二分之一,直至只剩下一个元素,*即为已经排好序的单元素数组,然后开始合并排序,最后形成排好序的数组* 算法复杂度为:O(nlogn)*/public class MergeSort{ ...原创 2019-04-06 11:00:03 · 645 阅读 · 0 评论 -
插入排序,Java实现
插入排序:算法思想:另建一个新的数组,长度跟要要排序的数组大小相同,遍历原数组,遍历的时插入元素到新数组中,保证新数组每插入一个新元素时,都是有序的。即每次插入的时候先找到要插入的位置,然后把该位置及以后的元素后移,然后插入元素。直至遍历完原来的数组,这时候,新数组就是原数组的有序排列。(其他排序,可见我的其他博文)/** * 插入排序 */public class Inser...原创 2019-04-06 12:52:18 · 121 阅读 · 0 评论 -
二叉查找树,Java实现
实现二叉查找树:import java.util.ArrayList;/** * 二叉查找树 * 这里使用范型实现,增加其可重用性 * @param <E> */public class BST<E extends Comparable<E>> { //树根 public TreeNode<E> root; ...原创 2019-04-08 00:47:04 · 176 阅读 · 0 评论 -
机器人的运动范围,Java实现
该题型属于回溯法的模型: 回溯法适合由多个步骤组成的问题,而且每一个步骤有多个选择。选择了其中一个以后,又会面临新的选择。在不断选择的过程中到达最终状态/** * 机器人的运动范围 * 使用回溯法解决 */public class Main13 { //记录能走的格子总数 public int total = 0; //函数入口 pub...原创 2019-04-08 16:11:47 · 197 阅读 · 0 评论 -
矩阵中的路径,Java实现,剑指Offer面试题12
矩阵中的路径符合回溯法,因而用回溯法解决。其他剑指Offer面试题答案可见我其他博客/** * 矩阵中的路径 * 回溯法 */public class Main12 { //函数入口 public boolean hasPath(char[] matrix, int rows, int cols, char[] str){ //建立字符串的二维矩阵,...原创 2019-04-08 17:11:05 · 259 阅读 · 0 评论 -
整数拆分,LeetCode 343题 ,Java实现
整数拆分问题,求最有值,具有最优子结构,具有重叠自问题 --->符合动态规划模型通过自底向下的方式,把计算过的自问题结果保存起来,减少运算次数。/** * 整数划分问题 * 动态规划, * 要分析清楚, * 几个特点:1,求最优值,2,最优子结构,3,重叠子问题 * 子问题的答案先存起来 */public class Main343 { public i...原创 2019-04-09 23:45:37 · 1401 阅读 · 0 评论 -
链表中环的入口节点,剑指Offer面试题23。Java实现
这道题的思路如下:特殊情况: 1、头节点为空,或者只有头节点,则返回null,不存在环(鲁棒性,考虑清楚特殊情况)常规情况: 1、首先判断有无环:通过两个速度不一样的指针同时从头开始走,快指针一次走两步,慢指针一次走一步,如果存在环,快指针一定会赶上慢指针; 当它们不为空,且相同的时候,说明它们在环中相遇了。 2、判断环中有多少个节点:当从上述步骤走完的时候,快指针和...原创 2019-04-10 07:39:13 · 221 阅读 · 0 评论 -
递归选择排序,从小到大/java语言
import java.util.Scanner;//递归选择排序,从小到大public class Re4 { public static void main(String args[]){ Scanner input = new Scanner(System.in); System.out.println("请输入一个数字 n ,用于建立一个长...原创 2018-06-13 15:23:42 · 1270 阅读 · 0 评论 -
用递归实现判断一个字符串是否为回文串,Java实现
//用递归实现判断一个字符串是否为回文串import java.util.Scanner;public class Re3 { public static void main(String args[]){ Scanner input = new Scanner(System.in); String str = input.nextLine(...原创 2018-06-13 15:22:53 · 3765 阅读 · 3 评论 -
java语言,用递归解决斐波那契数列问题
import java.util.Scanner;//计算斐波那契数//思路分析/* 斐波那契数列问题: 数列: 0 1 1 2 3 5 8 13 21 54.。。。。。。 下表: 0 1 2 3 4 5 6 7 8 9 .。。。。。 即: fib(0) = 0 fib(1) = 1 ...原创 2018-06-13 15:18:55 · 666 阅读 · 0 评论 -
java语言,用递归的方法求n的阶乘
import java.util.Scanner;//用递归的方法求n的阶乘public class Re1 { public static void main(String args[]){ Scanner input = new Scanner(System.in); //构建一个输入实例 int n = input.nextInt(); ...原创 2018-06-13 15:16:42 · 17161 阅读 · 1 评论 -
删除链表中重复的节点Java实现,剑指Offer面试题18
常规链表应用/** * 删除重复的节点 * 用的指针比较多,注意程序的鲁棒性 */public class Main18 { public ListNode deleteDuplication(ListNode pHead) { //若头指针为null,直接返回 if(pHead == null) { return n...原创 2019-04-10 21:28:41 · 426 阅读 · 0 评论 -
树的子结构,Java实现,剑指Offer面试题26
主要是考察树的遍历和指针的运用,难度不大/** * 树的子结构 */public class Main26 { /** * 入口函数 * 优先检测空指针等特殊情况 * @param root1 * @param root2 * @return */ public boolean HasSubtree(Tree...原创 2019-04-10 22:40:54 · 167 阅读 · 0 评论 -
二叉树的镜像,Java实现,剑指Offer27题
二叉树的镜像这道题比较简单,熟悉二叉树就能清楚地分析出其镜像的结构特征,递归交换左右子树即可/** * 二叉树的镜像 */public class Main27 { /** * 先判断空树的特殊情况 * @param root */ public void Mirror(TreeNode root) { if (roo...原创 2019-04-10 23:19:34 · 192 阅读 · 0 评论 -
大整数乘法,Java实现
/** * 分治法 */public class BigDecimal { // 以字符串的方式输入两个超大的整数,将两个数值相乘的结果计算出来 public static void main(String[] args) { Scanner in = new Scanner(System.in); String a = in.next();...原创 2019-04-19 00:21:45 · 2706 阅读 · 0 评论 -
堆排序,Java实现
这里用数组实现一个堆排序,其他排序算法可见我的其他博文。第一个类:Heap.java,建立大顶堆,即堆顶的元素每次都是堆中最大的数。import java.util.ArrayList;/** * 用数组实现一个大顶堆,小顶堆类似 * 时间复杂度:O(nlogn) * 空间复杂度比归并排序要好 * @param <E> */public class Heap&...原创 2019-04-07 21:28:43 · 135 阅读 · 0 评论 -
二分搜索算法,Java实现
这里用递归和非递归的方式实现了二分搜索:PS:二分搜索是对已经排序完成的数组进行搜索定位,我这里是以升序排列为例,可用归并排序等算法进行排序(可见我其他博文)/** * 二分搜索算法,通过比较顺序列表中间元素的值,迅速缩小规模查找元素, * 时间复杂度为:O(n) = logn */public class BinarySearch { /** * 二分搜索...原创 2019-04-06 11:13:30 · 644 阅读 · 0 评论 -
快速排序Java实现
(其他排序,可见我的其他博文)/** * 快速排序 * 算法思想:把选定主元,然后把小于主元的元素放到主元前面,把大于主元的元素放到主元后面, * 然后分别对前面和后面的元素递归,再次选定主元,继续操作,递归求解,算法复杂度跟主元的选取有关, * 算法复杂度为:平均时间:O(nlogn) * */public class QuickSort { /** *...原创 2019-04-06 11:02:22 · 281 阅读 · 0 评论