
数据结构与算法
记录一些常见的数据结构与算法
SUNbrightness
一个全栈工程师,什么都会一点点。6年全栈,都会一点哈哈。
展开
-
java 中 sort 排序内部实现原理
首先先判断需要排序的数据量是否大于60小于60:使用插入排序,插入排序是稳定的大于60的数据量会根据数据类型选择排序方式。基本类型:使用快速排序。因为基本类型。1、2、2都是指向同一个常量池不需要考虑稳定性。Object类型:使用归并排序。应为归并排序具有稳定性。归并排序。在子规模数据量小于60时,子规模使用插入排序...原创 2018-02-21 10:09:06 · 2013 阅读 · 1 评论 -
整数的分划问题
如,对于正整数n=6,可以分划为:6 5+1 4+2, 4+1+1 3+3, 3+2+1, 3+1+1+1 2+2+2, 2+2+1+1, 2+1+1+1+1 1+1+1+1+1+1+1 现在的问题是,对于给定的正整数n,编写算法打印所有划分。用户从键盘输入 n (范围1~10)程序输出该整数的所有划分思路:::使用递归,把大于0的数的拆一下比如66=6+06 = 5+1 --------5...原创 2018-02-11 10:13:40 · 757 阅读 · 0 评论 -
贪心算法练习
声明:在学习贪心算法的时候,不要去在意贪心策略是怎样去证明的。把这些策略都累积成贪心经验即可给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字 符串拼起来之后形成的字符串具有最低的字典序。解释:字符串字典序。ca > ac 当字符串长度相等时 。 从左向右。 c>a (c的ascll码大于a)后边的不需要判断 确定 ca 大于 accac < d 当字符串长度...原创 2018-03-09 21:10:38 · 406 阅读 · 0 评论 -
矩阵乘法JAVA
import java.util.*;import java.util.Date;import java.sql.*;public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); ...原创 2018-03-11 18:29:01 · 378 阅读 · 0 评论 -
欧几里得算法。
import java.util.Scanner;public class Main { //欧几里得定理 public static int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b); } public static void main(String[] args){ Syst...原创 2018-03-28 20:09:18 · 250 阅读 · 0 评论 -
礼物盒(计蒜客)
题目链接礼物盒(计蒜客)分析:在DFS暴力破解已经非常熟练的情况下是没有任何难度的.import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.u...原创 2018-03-31 10:32:39 · 525 阅读 · 0 评论 -
java快速幂
快速幂原理简单的数学交换律当幂数为偶数时:当幂数为奇数时:同理:看递归模式,快速幂public static int power2(int a,int n){ if(n==0){ return 1; } int r = power2(a,n/2); if((n&1)==1){ return r*r*a; }else{ return r*r; } ...原创 2018-05-16 10:07:29 · 1125 阅读 · 2 评论 -
滑动窗口的最大值(Java实现)
生成窗口最大值数组 【题目】 有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个 位置。 例如,数组为[4,3,5,4,3,3,6,7],窗口大小为3时:[4 3 5] 4 3 3 6 7 窗口中最大值为54 [3 5 4] 3 3 6 7 窗口中最大值为54 3 [5 4 ...原创 2018-06-06 21:54:12 · 2320 阅读 · 0 评论 -
序列累加最大和
给定一个数组arr,返回所有子数组的累加和中,最大的累加和一、简单办法。暴力遍历所有位置选出最大和三层循环 public static int getArrayMaxNum(int[] arr){ int max = Integer.MIN_VALUE; for(int i=0;i<arr.length;i++){ for(int j=i;j<arr.length;...原创 2018-03-09 18:38:22 · 719 阅读 · 0 评论 -
随时找到数据流的中位
【题目】 有一个源源不断地吐出整数的数据流,假设你有足够的空间来 保存吐出的数。请设计一个名叫MedianHolder的结构, MedianHolder可以随时取得之前吐出所有数的中位数。【要求】 1.如果MedianHolder已经保存了吐出的N个数,那么任意时刻 将一个新数加入到MedianHolder的过程,其时间复杂度是 O(logN)。 2.取得已经吐出的N个数整体的中位数的过程,时间复...原创 2018-02-13 18:37:30 · 725 阅读 · 0 评论 -
转圈打印矩
【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10【要求】 额外空间复杂度为O(1)。import java.util.*;public class Main {原创 2018-02-07 11:42:27 · 218 阅读 · 0 评论 -
一致性哈希
主要应用于后端数据存储原本的存储方式是前端传过来一个数据计算出哈希值后对已经有的服务器数量取余,使数据平均分布在所有服务器上如图缺点:一旦增加或者减少服务器的数量,所有数据需要从新计算哈希值从新分配服务器一致性哈希,,,用服务器的ip地址计算出一个非常大的值,想象所有的服务器在一个圆圈上。前端数据传输过来的时候,会有一个包含所有服务器器编号的的已排序的数组。前端传输的值计算出哈希值,使用二分...原创 2020-07-15 15:29:28 · 152 阅读 · 0 评论 -
求排序后数组中的最大差值
请设计一个复杂度为O(n)的算法,计算一个未排序数组中排序后相邻元素的最大差值。给定一个整数数组A和数组的大小n,请返回最大差值。保证数组元素个数大于等于2小于等于500。测试样例:[9,3,1,10],4返回:6由于除了桶排序外任何排序时间复杂最度低也是O(N*log2)所以我们考虑使用桶排序的思想原创 2018-02-05 15:47:02 · 966 阅读 · 0 评论 -
两个单链表相交的一系列问题
在本题中,单链表可能有环,也可能无环。给定两个单链表的头节点 head1和head2,这两个链表可能相交,也可能不相交。请实现一个函数, 如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null 即可。 要求:如果链表1的长度为N,链表2的长度为M,时间复杂度请达到 O(N+M),额外空间复杂度请达到O(1)这是节点类 public static class Node { publi...原创 2018-04-28 18:19:03 · 198 阅读 · 0 评论 -
牛客网(算法思维锻炼)
已知一个整型数组arr,数组长度为size且size大于2,arr有size-1种可以划分成左右两部分的方案。比如:arr = {3, 2, 3, 4, 1, 2}第1种划分左部分为[3],右部分为[2, 3, 4, 1, 2]第2种划分左部分为[3, 2],右部分为[3, 4, 1, 2]第3种划分左部分为[3, 2, 3],右部分为[4, 1, 2]第4种划分左部分为[原创 2020-07-15 15:21:45 · 320 阅读 · 0 评论 -
末尾0的个数
末尾0的个数链接:https://www.nowcoder.com/questionTerminal/6ffdd7e4197c403e88c6a8aa3e7a332a 来源:牛客网时间限制:1秒 空间限制:32768K输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2 输入描述:输入为一行,n(翻译 2018-02-01 19:56:32 · 658 阅读 · 0 评论 -
切金条
一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板?例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50,花费60 再把长度50的金条分成20和30,花费50 一共花费110...原创 2018-02-13 20:15:12 · 730 阅读 · 0 评论 -
项目利润(贪心算法)
输入: 参数1,正数数组costs 参数2,正数数组profits 参数3,正数k 参数4,正数mcosts[i]表示i号项目的花费 profits[i]表示i号项目在扣除花费之后还能挣到的钱(利润) k表示你不能并行、只能串行的最多做k个项目 m表示你初始的资金说明:你每做完一个项目,马上获得的收益,可以支持你去做下一个 项目。输出: 你最后获得的最大钱数每一贪心类的题,都有一个贪心策略,这道题...原创 2018-02-13 20:44:05 · 854 阅读 · 0 评论 -
容器装水。最大装水量
给定一个数组代表一个容器, 比如[3,1,2,4], 代表0位置是一个宽度为1,高度为3的直方图。 代表1位置是一个宽度为1,高度为1的直方图。 代表2位置是一个宽度为1,高度为2的直方图。 代表3位置是一个宽度为1,高度为4的直方图。 所有直方图的底部都在一条水平线上,且紧靠着。 把这个图想象成一个容器,这个容器可以装3格的水。 给定一个没有负数的数组arr,返回能装几格水?分析,每个位置可以盛...原创 2018-03-08 22:38:01 · 869 阅读 · 0 评论 -
暴力递归 转 动态规划
介绍递归和动态规划暴力递归:1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解动态规划 1,从暴力递归中来 2,将每一个子问题的解记录下来,避免重复计算 3,把暴力递归的过程,抽象成了状态表达 4,并且存在化简状态表达,使其更加简洁的可能什么是暴力递归?理解下递归。首先一个最...原创 2018-02-28 20:50:20 · 839 阅读 · 0 评论 -
带括号的四则运算
..这是我刚学数据结构时编写的。手法可能有点粗糙import java.util.*;public class operation {//计算包括括号的四则运算公式 15*15-12-(5+1+2*3) //简单四则计算器纯字符串 public String count(String a,String b,String c){ String num=null; double n...原创 2018-02-20 21:37:51 · 1355 阅读 · 0 评论 -
在行列都排好序的矩阵中找数
【题目】 给定一个有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+M),额外空间复杂度为O(1)考虑到都为有序那...原创 2018-02-08 12:18:45 · 235 阅读 · 0 评论 -
“之”字形打印矩阵
【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 “之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12【要求】 额外空间复杂度为O(1)。我们可以把这道题理解成打印对角线从上往下打印,和从下向上打印虽然不知道这个和"之"字有什么关系,但是题目要求我们只需要控制好对...原创 2018-02-08 11:59:03 · 297 阅读 · 0 评论 -
折纸问题
【题目】 请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时 折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2 次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一 个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。 例如:N=1时,打印: down N=2时,打印: down ...原创 2018-02-14 10:00:05 · 540 阅读 · 0 评论 -
算法的学习方式
跟奥数一样,我想这不仅是算法的学习方式原创 2018-02-14 09:07:24 · 244 阅读 · 0 评论