
算法
Tong_Nan
这个作者很懒,什么都没留下…
展开
-
每日算法(五)–java单链表的反转
每日算法(五)–java单链表的反转今天的算法是实现一个单链表的反转比如你的链表顺序是1 2 3 4 5要求之后的结构是 5 4 3 2 11.定义一个链表2.链表反转定义两个指针一个指向上一节点,一个指向当前节点,先将当前节点的下一节点纪录下来,然后让当前节点指向上一节点,再将当前节点纪录下来,再让下一节点变为当前节点3.链表遍历...原创 2019-04-24 11:03:06 · 274 阅读 · 0 评论 -
每日算法(三十八)-java分治算法(归并排序,快速排序)
每日算法(三十八)-java分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求...原创 2019-06-05 19:53:51 · 1077 阅读 · 1 评论 -
每日算法(二十)-java给定一个数组,求是否存在数组里的四个元素相加等于目标数
每日算法(二十)-java给定一个数组,求是否存在数组里的四个元素相加等于目标数结果可能不止一个,每个可能里面又包含了四个元素,所以这里用链表来存最先确定第一个数和第二个数,就是普通循环确定,然后根据先两个数找出来了,再利用二分查找去找后两个数,代码如下public static List<List<Integer>> fourSum(int arr[],int ta...原创 2019-06-01 16:30:04 · 607 阅读 · 0 评论 -
每日算法(二十一)-java给定一个数组,求是否存在数组里的两个元素相加等于目标数并求出下标(三种方法)
标题每日算法(二十一)-java给定一个数组,求是否存在数组里的两个元素相加等于目标数并求出下标(三种方法)第一种方法,直接双遍历,想等就输出public static void twosum(int arr[], int target){ for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ ...原创 2019-06-01 16:37:14 · 1622 阅读 · 0 评论 -
每日算法(二十二)-java判断字符串内容是否符合某种条件
每日算法(二十二)-java判断字符串内容是否符合某种条件Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.Input: “()”Output: trueExample 2:Input: “()[]{}”...原创 2019-06-01 16:44:09 · 1732 阅读 · 0 评论 -
每日算法(二十四)-java找到两个数组的公共部分
每日算法(二十四)-java找到两个数组的公共部分找到两个数组的公共部分Example 1:Input: nums1 = [1,2,2,1], nums2 = [2,2]Output: [2,2]Example 2:Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]Output: [4,9]这里直接双重遍历,两个数组都是从第一个元素开始,当左边数...原创 2019-06-01 16:51:23 · 1558 阅读 · 0 评论 -
每日算法(二十五)-java求单链表的倒数第n个元素的值
每日算法(二十四)-java求单链表的倒数第n个元素的值求单链表的倒数第n个元素的值比如1-2-3-4-5-6求倒数第3个元素 是 4 …建立两个指针,一开始都指向第一个数,然后将第二个指针先跑到倒数第n-1数的位置,当第二个指针的下个节点不为空时,两个指针依次往后走,当为空时,第一个指针指向的位置就刚好是倒数第n个数public static int getbackward(Lis...原创 2019-06-01 16:57:15 · 1585 阅读 · 0 评论 -
每日算法(二十六)-java求数组种最小的n个不重复的数是多少
每日算法(二十六)-java求数组种最小的n个不重复的数是多少先用map来存数组,key存元素,value代表它出现的次数,重新自定义sort里的compare方法进行排序代码如下public static List<Integer> result(int arr[],int k){ List<Integer> result=new ArrayList<>...原创 2019-06-01 17:05:56 · 402 阅读 · 0 评论 -
每日算法(三十九)-java回溯法解决八皇后
java回溯法解决八皇后该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路是按行来规定皇后,第一行放第一个皇后,第二行放第二个,然后通过遍历所有列,来判断下一个皇后能否放在该列。直到所有皇后都放完,或者放哪都不行。详细一点说,第一个皇后先放第一行第一列,然后第二个...原创 2019-06-06 18:11:33 · 470 阅读 · 0 评论 -
每日算法(四十二)-java输入两个数字a、b,随后一行输入a个数字,从a个数字中选取b个数字进行组合
每日算法(四十二)-java输入两个数字a、b,随后一行输入a个数字,从a个数字中选取b个数字进行组合输入两个数字a、b,随后一行输入a个数字,从a个数字中选取b个数字进行组合,判断有几组数据之和为素数。例如:输入:4 33 7 12 19输出:1循环遍历每次取三个数,分别是i,i+1,i+2,当超过长度就取模,求和之后进行素数判断这里判断素数是将小于2,2,能被2整除的先...原创 2019-06-06 21:43:06 · 1160 阅读 · 0 评论 -
每日算法(四十三)-java为了更改的规划城市,需要统计楼栋数目信息。
每日算法(四十三)-java为了更改的规划城市,需要统计楼栋数目信息。为了更改的规划城市,需要统计楼栋数目信息。方法如下,一张航拍照片会被分隔为N*M个小格子,每个格子可以用0跟1来表示。如果楼栋的楼顶出现在了格子里,那么此格子就被设置为1,出现在相邻格子里的楼顶被记为同一座楼栋,若是斜邻的则记为不同的楼栋。求一张图里的楼栋总数目。例如,输入{{0,0,0,0,0},{0,1,1,0,0...原创 2019-06-10 18:31:01 · 527 阅读 · 0 评论 -
每日算法(三十六)-java递归
每日算法(三十六)-java递归递归(recursion):程序调用自身的编程技巧。递归满足2个条件:1)有反复执行的过程(调用自身)2)有跳出反复执行过程的条件(递归出口)递归与栈的关系下面演示的是求n的阶乘int Factorial(int n){ if (n == 0) return 1; return n * Factorial(n -...原创 2019-06-05 19:23:07 · 241 阅读 · 0 评论 -
每日算法(十八)-java求组合 输入两个参数 参数1 小球的个数 参数2 取多少个 输出 一共有多少种取法
每日算法(十八)-java求组合 输入两个参数 参数1 小球的个数 参数2 取多少个 输出 一共有多少种取法求组合输入两个参数 参数1 小球的个数 参数2 取多少个输出 一共有多少种取法比如 f(5,2) 表示从5个球中取2个这里的两个我们可以把他看作是特殊球,比如一共五个球,有两个特殊球,每次依次去取,每次取出只有两种情况,一种是取到了特殊球,一种是没取到特殊球,所有情况...原创 2019-05-31 09:53:36 · 356 阅读 · 0 评论 -
每日算法(六)--java判断单链表是否有环
每日算法(六)–java判断单链表是否有环可以设计两个快慢指针,一个每次走两步一个每次走一步,如果快慢指针碰面,则说明有环1.创建链表public class ListNode { private int data; //这个节点的数据 ListNode next; //指向下个结点 public ListNode(int data) { super(); thi...原创 2019-04-24 11:12:21 · 223 阅读 · 0 评论 -
每日算法(八)-java链表相加
每日算法(八)-java链表相加链表的反转和数组转化成链表的方法在上一节中有相应代码,这里就只显示链表相加的代码输入两个链表l1,l2,顺序遍历取链表里的数,分别进行相加取模,如果相加为10则进11.创建链表public class ListNode { private int data; ListNode next; public ListNode(int data){ s...原创 2019-04-24 11:24:14 · 734 阅读 · 0 评论 -
每日算法(十)-java删除链表重复元素,只保留一个
每日算法(十)-java删除链表重复元素,只保留一个比如1, 2, 2, 2, 2, 4, 4, 5, 6, 6, 9, 8, 8我们的方法处理以后的结果是1 -> 2 -> 4 -> 5 -> 6 -> 9 -> 8 ->直接遍历链表,如果下一个节点的值和当前的相同,则跳过下一个节点,直接指向下下个节点1.创建链表public class ...原创 2019-04-24 11:31:23 · 988 阅读 · 0 评论 -
每日算法(十一)-java删除链表重复元素,不保留重复元素
每日算法(十一)-java删除链表重复元素,不保留重复元素比如1, 2, 2, 2, 2, 4, 4, 5, 6, 6, 9, 8, 8我们的方法处理以后的结果是1 -> 5 -> 9 ->设置第一个头节点值为0,临时节点保持当前节点,往后遍历,如果下一个节点与当前节点相等,记录下当前的值,如果有当前节点的值与相等,跳过当前节点,继续遍历1.创建链表public ...原创 2019-04-24 11:41:07 · 660 阅读 · 0 评论 -
每日算法(十二)-java找出一个数组的所有字串,数组里面元素不重复
每日算法(十二)-java找出一个数组的所有字串,数组里面元素不重复获取一个数组的所有字串数组里面的元素不重复Input:nums=[1,2,3]Outpur:[3],[1].[2[,[1,2,3],[1,3],[2,3],[1,2],[]这里我们尝试用按位法来解决:(a,b,c)(1,1,1)->(a,b,c)(1,1,0)->(a,b)(1,0,1)->(...原创 2019-05-05 13:13:36 · 765 阅读 · 0 评论 -
每日算法(十四)-java旋转二维数组 顺时针90度
每日算法(十四)-java旋转二维数组 顺时针90度Example 1:input[[1,2,3],[4,5,6],[7,8,9]],output[[7,4,1],[8,5,2],[9,6,3]]看到应该就能很容易想到两层循环遍历即可,每次取出数组的第一个下标元素,从最后一个数组开始代码如下public class RotateArray {public sta...原创 2019-05-08 14:30:58 · 2779 阅读 · 0 评论 -
每日算法(十五)-java给定一个有序数组,删除其中重复元素,只保留一个,并返回新数组的长度
每日算法(十五)-java给定一个有序数组,删除其中重复元素,只保留一个,并返回新数组的长度Example 2:Given nums = [0,0,1,1,1,2,2,3,3,4],Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3,...原创 2019-05-08 15:21:58 · 3219 阅读 · 0 评论 -
每日算法(十六)-java给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数,输出旋转后的数组
每日算法(十六)-java给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数,输出旋转后的数组示例 1:输入:[1,2,3,4,5,6,7]和 k = 3输出:[5,6,7,1,2,3,4]解释:向右旋转 1 步:[7,1,2,3,4,5,6]向右旋转 2 步:[6,7,1,2,3,4,5]向右旋转 3 步:[5,6,7,1,2,3,4]由于K是个非负数,所以...原创 2019-05-08 15:33:40 · 2205 阅读 · 0 评论 -
每日算法(十三)-java从一个有序数组中找出目标元素在数组中的出现的首次和最后一次位置
每日算法(十三)-java从一个有序数组中找出目标元素在数组中的出现的首次和最后一次位置从一个有序数组中找出目标元素在数组中的出现的首次和最后一次位置要求时间复杂度O(logn)Example 1:Input: nums = [5,7,7,8,8,8,10], target = 8Output: [3,5]Example 2:Input: nums = [5,7,7,8,8,10],...原创 2019-05-07 20:06:43 · 1528 阅读 · 1 评论 -
每日算法(十七)-java求有序不重复数组的全排列 ,长度为n的数组 全排列应该有n! 个
每日算法(十七)-java求有序不重复数组的全排列 ,长度为n的数组 全排列应该有n! 个输入 { 1, 2, 3, 4 }输出[1, 2, 3, 4] [1, 2, 4, 3] [1, 3, 2, 4] [1, 3, 4, 2] [1, 4, 3, 2] [1, 4, 2, 3][2, 1, 3, 4] [2, 1, 4, 3] [2, 3, 1, 4] [2, 3, 4, 1] [2,...原创 2019-05-31 09:43:34 · 702 阅读 · 0 评论 -
每日算法(四十五)-java找出topK的值
每日算法(四十五)-java找出topK的值这里用的方法的堆排序的思想(如果堆排序不是很清楚可以看之前的排序算法里的堆排序),构造容量位K的小顶堆,即数组前K个元素构造出的堆,堆积为最小值,之后将堆顶分别于剩下的所有元素依次进行比较,比堆顶大则交换,再进行调整,代码如下public class TopK {public int findTopK(int arr[] ,int k){ //构...原创 2019-06-10 19:58:52 · 1222 阅读 · 0 评论