随笔分类 - 算法(主要在leetcode上刷题,代码放在github上,需要的可以关注一波)
摘要:【两数相加】 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
阅读全文
摘要:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。题解:这个题目直接用暴力遍历就可以,代码如下:
阅读全文
摘要:package com.nowcoder.huawei; import java.util.*; public class LISP { // 只通过80% // (+ (* 2 3) (^ 4)) // (+ (* 2 3) (^ 4))(2 3) // ((+ 2 3) // ((+ 2 3)) // (^ (+ (* 2 3) (^ ((...
阅读全文
摘要:1.背包问题 (1)问题由来:给定n个重量为w1,w2..........wn,价值为v1,v2........,vn的物品和一个承重为W的背包,求这些物品中最有价值的一个子集,并要求能够装到背包中。这里假设所有的重量和包的承重都是正整数,而物品的总重量不必是整数。 (2)地推公式:为了设计一个动态
阅读全文
摘要:package com.nowcoder.huawei; import java.util.Scanner; /** * 输入的第 1 行,为两个正整数,用一个空格隔开:N m * (其中 N ( 0 ,表示该物品为附件, q 是所属主件的编号) * * * */ public class ShoppingList { public static int getMax...
阅读全文
摘要:剑指offer34题: 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 解题思路:本题剑指上说的很麻烦,其实思路很简单,我们只用比较3个数:用于乘2的最小的数、用于
阅读全文
摘要:给定一个N*M的整数型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好顺序的。实现一个函数,判断K是否在matrix中,例如0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9,如果K为7,返回true;如果K为6,则返回false
阅读全文
摘要:给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序。 (1)准备桶,如果一个数组中有N个数,就准备N+1个桶,先遍历整个数组找到最小值和最大值,如果最小值和最大值相等,说明整个数组就只有一种数,最大差值是0。如果最小值和最大值不等,我们将最小值放
阅读全文
摘要:package com.cisco.www.sort;import java.util.Arrays;import java.util.PriorityQueue;import java.util.TreeMap;import java.util.TreeSet;/** * 比较器:负数第一个参数放
阅读全文
摘要:package com.cisco.www.test;/** * 快排 */public class QuickSort1 { public static void quickSort(int[] arr){ if(arr==null||arr.length<2){ return; } quickS
阅读全文
摘要:package com.cisco.www.sort;import java.util.Arrays;/** * 插入排序,时间复杂度和数据状况有关系的,这里就有最好情况,最坏情况和平均情况 */public class InsertSort { public static void insertS
阅读全文
摘要:package com.cisco.www.test;import java.util.Arrays;/** * 选择排序算法思想: * 每次从待排序的元素中选出最小或者最大的元素 * 存放在序列的起始位置,直到全部元素排序完成 * 选择排序需要比较O(N^2)/2次,所以时间复杂度是O(N^2)
阅读全文
摘要:import java.util.Arrays;/** *冒泡排序:时间复杂度O(N^2),空间复杂度O(1),稳定的排序 * 每趟确定一个元素的位置,所以需要arr.length趟排序, */public class BubbleSort { public static void bubbleSo
阅读全文
摘要:1.用数组结构实现大小固定的队列和栈? 2.实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返 回栈中最小元素的操作。 【要求】 (1).pop、push、getMin操作的时间复杂度都是O(1)。 (2).设计的栈类型可以使用现成的栈结构。 3.如何仅用队列结构实现栈结构? 队列的前面n个数进
阅读全文
摘要:1.非基于比较的排序,与被排序的样本的实际数据状况很有关系,所以在实际中并不经常使用 2.时间复杂度为O(N),额外空间复杂度O(N) 3.稳定的排序 4.例子:桶排序,容器,一种数据状况出现的词频。桶排序可以分为两种具体的实现:基数排序和计数排序,计数排序就是桶排序的一个具体的体现 (1)假设数组
阅读全文
摘要:1.时间复杂度为O(n^2)排序的稳定性:原序列中相同的值,在排好顺序之后,能够保证原来的相同的值相对顺序保持不变。在一个算法中,如果所有相同值,在排完序之后,值的顺序不会被打乱,那么这个算法就是稳定的。如果会被打乱,那么这个排序就不具备稳定性。 如果在相等情况下也进行交换,那么冒泡排序就不是稳定的
阅读全文
摘要:1.问题描述: 我们将乱序的红白蓝三色小球排列成有序的红白蓝三色的同颜色在一起的小球组。这个问题之所以叫荷兰国旗,是因为我们可以将红白蓝三色小球想象成条状物,有序排列后正好组成荷兰国旗。 2.荷兰国旗问题与数组: 给定一个数组arr,和一个数num,请把小于num的数放到数组的左边,等于num的数放
阅读全文
摘要:1.原理(本次以大根堆为例进行讲解,小根堆同理): 利用大根堆(小根堆)堆顶记录的是最大关键字(最小关键字)的特性,使得每次可以将堆顶的最值取出依次放入数组中,最后得到一个依次增大(减小)的序列。 (1)大根堆堆实际上是一棵完全二叉树,其任何一个非叶节点满足: key[i] >= k[2i+1]&&
阅读全文
摘要:1.时间复杂度O(NlogN),额外空间复杂度O(1) 2.二叉树: (1)完全二叉树:要么是一棵满二叉树(满二叉树属于完全二叉树);如果不是满二叉树,那么这棵树应该是从左往右依次补齐的。 (2)通过数组来理解完全二叉树,对于节点i,在不越界的情况下左孩子的下标是2i+1,右孩子下标是2*i+2,如
阅读全文
摘要:0.经典快排:将数组最后位置的数值x作为划分值,将小于等于x的放在左边,大于x的放在右边, 让小于等于x区域的最后一个位置上放x值,如果有多个值等于x,中间区域放的什么值无所谓,左边区域最后一个数放x就可以,左边区域放小于等于x的值,右边放大于x的值,经典快排的时间复杂度和数据状况是有关系的。最好的
阅读全文