Java数据结构与算法
分享Java数据结构与算法相关的代码
浩比浩比
这个作者很懒,什么都没留下…
展开
-
Java学习手册:数据结构与算法汇总
数据结构与算法程序题汇总如下:(不断更新中)1、PAT(Basic Level)Practise-----10012、Java学习手册:(数据结构与算法-链表)如何实现单链表的增删操作?3、Java学习手册:(数据结构与算法-链表)如何实现单链表排序?4、Java学习手册:(数据结构与算法-链表)如何从链表中删除重复元素?5、Java学习手册:(数据结构与算法-链表)如何找出单链表中的倒...原创 2019-08-15 09:51:07 · 3063 阅读 · 2 评论 -
Java学习手册:(数据结构与算法-数组)如何求数对之差的最大值?
问题:数组中的一个数字减去它右边子数组中的一个数字可以得到一个差值,求所有可能的差值中的最大值,例如,数组{1,4,17,3,2,9}中,最大差值为17-2=15。方法一:暴力法。双重循环遍历数组,寻找任意两个元素之间的差值,并取最大值。时间复杂度:O(n)方法一代码如下:package com.haobi;/* * 方法一:暴力法。 */public class T...原创 2019-09-18 10:44:52 · 624 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何用递归方法求出一个整数数组的最大元素?
方法一:递归求解“数组中第一个元素”与“数组中其他元素组成的子数组的最大值”的最大值。方法一代码:package com.haobi;public class Test17 { public static void main(String[] args) { int []num = {0,16,2,3,4,5,10,7,8,9}; System.out.println(...原创 2019-09-16 21:41:01 · 426 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何找出数组中唯一的重复元素?
题目:数组a[N],1~N-1这N-1个数存放在a[N]中,其中某个数重复1次。写一个函数,找出被重复的数字。要求每个数组元素只能访问1次,并且不用辅助存储空间。方法一:由于题目要求每个数组元素只能访问1次,且不用辅助存储空间,由于只有一个数字重复且是连续的,因此可以将数组求和减去1~N-1的和,即为所求的重复数。方法二:异或法。每两个相异的数执行异或运算之后,结果为1;每两个...原创 2019-09-16 21:25:00 · 248 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)N-Queens(leetcode51)
题目:求n皇后问题的所有解。n个皇后摆放在n*n的棋盘格中,使得横、竖和两个对角线方向均不会出现两个皇后。思路:(1)采用剪枝减少不必要的计算;(2) 快速判断不合法的情况:a、竖向;b、对角线1(右上→左下);c、对角线2(左上→右下);b、对角线1:共有 2*n-1 个对角线,其中同一对角线上 i+j 的值相等,因此可用 i+j 来标识当前的对角线;c、对角线2:共...原创 2019-09-01 18:40:43 · 224 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Number of Islands(leetcode200)
题目:给的一个二维数组,只含有0和1两个字符。其中1代表陆地,0代表水域。横向和纵向的陆地连接成岛屿,被水域分隔开。问给出的地图中有多少岛屿?示例一:输入:11110110101100000000输出:1示例二:输入:11000110000010000011输出:2思路:flood fill方法代码如下:pack...原创 2019-09-01 13:28:43 · 243 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Word Search(leetcode79)
题目:给定一个二维平面的字母和一个单词,看是否可以在这个二维平面上找到该单词。其中找到这个单词的规则是,从一个字母出发,可以横向或者纵向连接二维平面上的其他字母。同一个位置的字母只能使用一次。输入:(1)二维数组:{ {'A','B','C','E'}, {'S','F','C','S'}, {'A','D','E','E'}}(2)输入/输出“ABCCED”→true“S...原创 2019-09-01 12:44:13 · 244 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Combinations(leetcode77)
题目:给出两个整数n和k,求在1...n这n个数字中选出k个数字的所有组合。输入:n = 4 , k = 2输出:[ [1 ,2], [1 ,3], [1 ,4], [2 ,3], [2 ,4], [3 ,4], ]方法一思路:使用回溯算法求解组合问题方法一代码如下:package com.haobi;import java.util.ArrayList...原创 2019-09-01 11:07:31 · 289 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-字符串)Leter Combinations of a Phone Number(leetcode17)
题目:给出一个数字字符串,返回这个数字字符串能表示的所有字母组合。输入:字符串数组23输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]思路:采用递归的方法。代码如下:package com.haobi;import java.util.ArrayList;import java.util.List;p...原创 2019-08-31 18:12:26 · 558 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何找出数组中只出现一次的数字?
问题描述:一个整型数组里除了一个数字之外,其他数字都出现了2次。找出这个只出现1次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。方法:由于时间复杂度与空间复杂度的限制,题目强调只有一个数字出现了1次,其余数字出现了2次。可以通过异或运算,因为任何一个数字异或它自己都等于0,所以从头到尾依次异或数组中的每一个数字。出现两次的数字会在异或中被抵消掉,最终的结果就是只出现1次的数字。注意:...原创 2019-08-22 20:28:42 · 284 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何找出数组中第k个最小的数?
问题描述:给定一个无序的数组,从一个数组中找出第k个最小的数。例如,对于给定数组{1,5,2,6,8,0,6},其中第4小的数为5。方法一:对数组进行排序,然后返回其第k个元素。方法一代码如下:package com.haobi;import java.util.Arrays;/* * 如何找出数组中第k个最小的数? */public class Test12 { public...原创 2019-08-22 20:04:23 · 768 阅读 · 2 评论 -
Java学习手册:(数据结构与算法-数组)如何求最大连续子数组之和?
问题描述一个有n个元素的数组,这n个元素可以是正数也可以是负数,数组中连续的一个或多个元素可以组成一个连续的子数组,一个数组可能有多个这样的连续子数组,求子数组和的最大值。示例:对于数组{1,-2,4,8,-4,7,-1,-5}而言,其最大和的子数组为{4,8,-4,7},最大值为15。方法一:暴力法。找出所有子数组,然后求出子数组之和,在所有子数组和中取最大值。时间复杂度:O(n^3...原创 2019-08-21 18:11:04 · 361 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何把一个数组循环右移k位?
算法思想:假设要把数组序列12345678右移2位变为78123456,比较移位前后数组序列的形式,可以看出,其中有两段序列的顺序是不变的,即78和123456,可以把这两段看作两个整体,右移k位就是把两个数组交换一下。以12345678为例,步骤如下:(1)逆序数组子序列123456,数组序列的形式变为65432178。(2)逆序数组子序列78,数组序列的形式变为65432187。(3)全...原创 2019-08-21 15:46:20 · 616 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-栈与队列)Valid Parentheses(leetcode20)
题目:给定一个字符串,只包含(,[,{,),],},判定字符串中的括号匹配是否合法。示例:如"()","()[]{}"是合法的如"(]","([)]"是非法的思路:依次遍历,遇到左括号入栈,右括号出栈,进行匹配。代码:package com.haobi;import java.util.Stack;public class ValidParentheses { pub...原创 2019-08-20 17:30:02 · 171 阅读 · 0 评论 -
Java学习手册:广联达2020届校园招聘——软件开发工程师/测试工程师
1、C/C++程序填空题(20分)大体是一个递归调用,需要填写递归调用的参数。2、交换扑克牌(20分)给定了两数组,规定只能交换一个元素,使得两个数组的总和相同。3、盛水最多的容器(leetcode10)(30分)题目:给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i...原创 2019-08-20 09:10:04 · 1380 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Contains Duplicate III(leetcode220)
题目:给出一个整型数组nums,是否存在索引i和j,使得nums[i]和nums[j]之间的差别不超过给定的整数t,且i和j之间的差别不超过给定的整数k。方法一:滑动窗口+查找表方法一代码:package com.haobi;import java.util.HashMap;import java.util.Map;public class ContainsDuplicateI...原创 2019-08-15 11:56:19 · 181 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Contains Duplicate II(leetcode219)
题目:给出一个整型数组nums和一个整数k,是否存在索引i和j,使得nums[i] == nums[j],且i和j之间的差不超过k。方法一:暴力法,枚举所有:O(n^2)方法二:滑动窗口+查找表方法二代码:package com.haobi;import java.util.HashMap;import java.util.Map;public class Contains...原创 2019-08-15 11:05:11 · 149 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Number of Boomerangs(leetcode447)
题目:给出一个平面上的n个点,寻找存在多少个由这些点构成的三元组(i, j, k),使得i, j两点的距离等于i, k两点的距离。其中n最多为500,且所有点坐标的范围在[-10000, 10000]之间。示例:如[[0, 0], [1, 0], [2,0]],则结果为2两个结果为[[1, 0], [0, 0], [2, 0]]和[[1, 0], [2, 0], [0, 0]]方法一...原创 2019-08-15 10:29:31 · 159 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)4Sum(leetcode454)
题目:给出四个整型数组A、B、C、D,寻扎有多少i、j、k、l的组合使得A[i] + B[j] + C[k] + D[l] == 0。其中,A、B、C、D中均含有相同的元素个数N,且0<=N<=500。方法一:暴力解法:O(n^4)500^4 = 625,0000,0000方法二:将D中的元素放入查找表:O(n^3)500^3 = 1,2500,0000方法三:将C+...原创 2019-08-14 22:45:55 · 168 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Two Sum(leetcode1)
题目:给出一个整型数组nums。返回这个数组中两个数字的索引值i和j,使得nums[i]+nums[j]等于一个给定的target值。两个索引不能相等。示例:如nums = [2, 7, 11, 15], target = 9返回[0,1]方法一:暴力解法:O(n^2)方法二:排序后,使用双索引对撞:O(nlogn) + O(n) = O(nlogn)方法三:查找表。将所有...原创 2019-08-14 22:04:00 · 157 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Longest Substring Without Repeating Characters(leetcode3)
题目:在一个字符串中寻找没有重复字母的最长子串:如“abcabcbb”,则结果为“abc”如“bbbbbbb”,则结果为“b”如“pwwkew”,则结果为“wke”方法一:将字符串转换为字符数组,然后采用双索引技术/滑动窗口方法。方法一代码:package com.haobi;public class LongestSubstringWithoutRepeatingChar...原创 2019-08-14 10:20:53 · 167 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Minimun Size Subarray Sum(leetcode209)
问题:给定一个整型数组和一个数字s,找到数组中最短的一个连续子数组,使得连续子数组的数字和sum>=s,返回这个最短的连续子数组的长度值。示例:如,给定数组[2, 3, 1, 2, 4, 3],s = 7。答案为[ 4, 3 ],返回2。方法一:暴力法,遍历所有的连续子数组[i…j],计算其和sum,验证sum>=s,时间复杂度O(n^2)。方法一代码:package c...原创 2019-08-13 23:04:09 · 394 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Sort Colors(leetcode75)
题目:给定一个有n个元素的数组,数组中元素的取值只有0,1,2三种可能。为这个数组排序。方法一:计数排序:分别统计0、1、2的元素个数。方法一代码:package com.haobi;public class SortColors { public static void main(String[] args) { int[] arr = {0,1,2,0,2,1,0,2,1,...原创 2019-08-13 20:58:57 · 185 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)Move Zeros(leetcode283)
题目:给定一个数组nums,写一个函数,将数组中所有的0挪到数组的末尾,而维持其他所有非0元素的相对位置。举例:nums = [0, 1, 0, 3, 12],函数运行后结果为[1, 3, 12, 0, 0]方法一:新建一个数组,将非零元素提取出来,存入新建的数组,之后再按次序赋值给原数组,对于原数组之后的数组元素全部赋0。时间复杂度:O(n)空间复杂度:O(n)方法一代码:pa...原创 2019-08-13 16:59:07 · 256 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-查找)二分查找
二分查找也称折半查找,仅用于有序的顺序表。一般情况下,表长为n的折半查找的判定树的深度和含有n个结点的完全二叉树的深度相同。为:log2(n+1)。package com.haobi;/* * 二分查找 */public class BinarySearch { public static void main(String[] args) { int[] a = {1,2,3,5,...原创 2019-08-13 15:51:31 · 147 阅读 · 0 评论 -
Java学习手册:贝壳找房2020校招——移动端工程师试卷
一、计算绝对值题目描述:给出n个正整数,要求找出相邻两个数字中差的绝对值最小的一对数字,如果有差的绝对值相同的,则输出最前面的一对数。2<n<=100,正整数都在10^16范围内。输入:输入包含2行,第一行为n,第二行是n个用空格分隔的正整数。输出:输出包含一行两个正整数,要求按照原来的顺序输出。样例输入:91 3 4 7 2 6 5 12 32样例输出:3 4...原创 2019-08-11 11:06:26 · 503 阅读 · 0 评论 -
Java学习手册:华为2020届校园招聘——软件题
一、全量字符集与已占用字符集(AC100)输入描述:输入一个字符串,字符串中包含了全量字符集和已占用字符集,两个字符集用@相连。@前的字符集合为全量字符集,@后的字符集为已占用字符集合。已占用字符集中的字符一定是全量字符集中的字符。字符集中的字符跟字符之间使用英文逗号分隔。字符集中的字符表示为字符加数字,字符跟数字使用英文冒号分隔,比如a:1,表示1个a字符。字符只考虑英文字母,区分大小写...原创 2019-08-07 22:33:42 · 2933 阅读 · 0 评论 -
Java学习手册:大疆创新2020届校园招聘——软件类岗位B卷题一
题目描述:有许多程序员都热爱玩游戏游戏,而小J自称为游戏王,曾玩过几百种游戏,几乎所有能玩到的游戏大作都玩遍了。随着时间的推移,他发觉已经没有游戏可以让他玩了!于是他想改玩一些古老的游戏,以成为真正的“游戏王”。他希望在接下来的一段时间内将过去出的游戏全部玩一遍,但是毕竟时间有限,因此他感到很苦恼。于是他给每个游戏标上一个成就值,同时估算了完成这些游戏所需要的时间。现在他只有X天时间。而每个游...原创 2019-08-07 18:47:56 · 999 阅读 · 0 评论 -
Java学习手册:大疆创新2020届校园招聘——软件类岗位B卷题二
题目描述:小B平时喜欢倒腾一些小东西,最近他准备给自己做的小机器人加入一套语音控制的功能,每个指令对应一个动作。由于语言转文字有很多现成的方案,所以小B打算直接复用这些方案,但是语音转成了文字之后,还需要将文字跟具体的动作对应起来。因此小B需要实现一个函数,将语音转换出来的文字,再转换成相应的动作。为了简单实现,小B将语音直接转成了拼音,然后把对应的动作也都起了名字,因此只要预先输入...原创 2019-08-07 09:51:20 · 545 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何求数组中两两相加等于20的组合
问题描述:给定一个数组{1,7,17,2,6,3,14},这个数组中满足条件的有两对组合——17+3=20和6+14=20。方法一:暴力法。两轮循环暴力查找。package com.haobi;/* * 如何求数组中两两相加等于50的组合 */public class Test5 { public static void findSum(int[] a, int sum) ...原创 2019-08-05 10:45:43 · 518 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何找出数组中重复元素最多的数?
问题描述:对于数组{1,5,4,3,4,4,5,4,5,5,6,6,6,6,6},元素1出现的次数为1次,元素3出现的次数为1次,元素4出现的次数为4次,元素5出现的次数为4次,元素6出现的次数为5次,找出数组中重复出现次数最多的数。思路:采用Map映射表。通过Map来记录每一个元素的出现次数,然后判断次数大小,进而找出重复次数最多的元素。package com.haobi;impo...原创 2019-08-05 10:16:24 · 594 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-排序)三路快排
在处理排序问题中,效率最高的当属快排,然而当待排序数据中存在大量重复元素时,快速排序无法发挥其优势,我们往往采用三路快排。为了能更好的理解下面的代码,附上排序过程图,如下:三路快排过程图程序如下:package com.haobi;import java.util.Scanner;/* * 三路快排 * * 针对的问题:对于快速排序,如果排序的数组中有很多重...原创 2019-07-31 19:38:53 · 291 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组/动态规划)买卖股票的最佳时机(leetcode122)
题目内容:给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你能获取的最大利润。注意你不能在买入股票前卖出股票。示例1:输入:[7, 1, 5, 3, 4, 6]输出:5解释:在第2天(股票价格=1)的时候买入,在第5天(股票价格=6)的时候卖出,最大利润=6-1=5。示例2:...原创 2019-07-31 15:47:35 · 204 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-递归)一个人爬楼梯,可以一次爬一阶或者两阶,问n层楼梯有多少种爬法?
算法思想:(1)只有一层楼梯,有1种方法,即 f(1) = 1;(2)有两层楼梯,有2种方法,即 f(2) = 2;(3)有三层楼梯,a、如果第一步爬一层,后面还有两层楼梯未爬,有2种方法,即f(2);b、如果第一步爬两层,后面还有一层未爬,有一种方法,即f(1);因此,总共有3种方法,即f(3) = f(2) + f(1) = 3;(4)有四层楼梯,a、如果第一层爬一层,后面还有...原创 2019-07-31 13:57:46 · 3006 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-字符串)拼多多20届学霸批笔试编程题第二题
题目描述:给定一个字符串数组(字符串长度和数组的长度均大于1且小于1024),所有字符均为大写字母。请问,给定的字符串数组是否能通过更换数组中元素的顺序,从而首尾相连,形成一个环,环上相邻字符串首尾衔接的字符相同。输入描述:一行输入,空格分隔,表示字符串数组。输出描述:一行输出,返回true或者false,表示是否可以形成环。示例1:输入:CAT TIGER RPC输出:true...原创 2019-07-29 15:35:52 · 376 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-正则表达式)如何判断一个身份证号码是否符合要求?
请判断一个身份证号码是否符合要求,并从中提取出该身份证号码对应的出生日期和性别。身份证号码长度为18位最后一位可以是数字也可以是字母X前六位为行政区码行政区码后8位为出生日期第17位为性别编码,单数为男生,双数为女生算法思想:正则表达式匹配是否符合要求...原创 2019-07-24 20:16:04 · 692 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何找出数组中第二大的数?
算法思想:定义两个变量:一个变量用来存储数组的最大值,初始为数组首元素。另一个变量用来存储数组元素的第二大数,初始值为最小负整数,然后遍历数组元素。package com.haobi;/* * 如何找出数组中的第二大数 */public class Test3 { public static int FindSecMax(int[] arr) { int max = arr[0...原创 2019-06-06 11:28:22 · 1229 阅读 · 0 评论 -
Java学习手册:(数据结构与算法-数组)如何找出数组中的最大元素与最小元素?
如何寻找数组中的最大值与最小值方法一:问题分解法。每一次分别找出最大值和最小值,一共需要遍历两次数组,比较次数为2N次(N为数组的大小)方法二:取单元素法。每次取出一个元素,先于已找到的最小值比较,再与已找到的最大值比较,秩序遍历一次数组,比较次数为2N次方法三:取双元素法。每次比较相邻的两个数,较大的与Max比较,较小的与Min比较,比较次数为1.5N次方法四:数组元素移位...原创 2019-06-06 10:58:09 · 1065 阅读 · 0 评论 -
Java学习手册:(数据结构与算法)如何不使用比较运算就可以求出两个数的最大值和最小值?
算法思想:应用数学方法,最大值Max(a,b)=(a+b+|a-b|)/2,最小值Max(a,b)=(a+b-|a-b|)/2。当a与b值非常大的时候,会出现数据溢出的情况,解决方法就是将数据类型转换为长整型,从而避免发生溢出。代码如下:package com.haobi;/* * 如何不使用比较运算就可以求出两个数的最大值与最小值? */public class Test2 {...原创 2019-05-31 10:02:11 · 275 阅读 · 0 评论 -
Java学习手册:(数据结构与算法)如何消除嵌套的括号?
问题描述:给定一个如下格式的字符串(1,(2,3),(4,(5,6),7)),括号内的元素可以是数字,也可以是另一个括号,实现一个算法以消除嵌套的括号,例如把上面的表达式变成(1,2,3,4,5,6,7),若表达式有错误,则报错。算法思想:问题包含两个功能①判断表达式是否正确②消除表达式中嵌套的括号。代码如下:package com.haobi;/* * 如何消除嵌套括号? *...原创 2019-05-31 09:38:36 · 256 阅读 · 0 评论