数据结构与算法
浩水浮生
好看的皮囊千篇一律,有趣的灵魂万里挑一。
展开
-
ConcurrentHashMap 的使用及其原理
在java中Map中的实现有HashMap、HashTable、LinkedHashMap等,其中最常用的有HashMap和HashTable,那么HashMap为什么很常用呢?因为HashMap的效率更高些,如果不是在多线程的环境下,不考虑线程安全问题,HashMap绝对是首选项,HashMap通过计算hash值实现快速查找的功能,所以查找的效率特别的高,那么HashMap的结构是...原创 2019-12-29 20:58:09 · 416 阅读 · 0 评论 -
手动实现单向链表
public class SingleLinkDemo { public static void main(String[] args) { SingleLink link = new SingleLink(); link.addNode("1"); link.addNode("2"); link.addNode("3"); link.addNode("4"); lin...原创 2019-10-29 21:50:29 · 162 阅读 · 0 评论 -
双向链表的简单实现
public class ShuangXiangLianBiao { public static void main(String[] args) { DoublyLink l=new DoublyLink(); l.addEndNode("a"); l.addEndNode("b"); l.addEndNode("c");...原创 2019-10-28 22:07:06 · 174 阅读 · 0 评论 -
leetCode 两数之和
1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力...转载 2019-06-24 22:36:56 · 91 阅读 · 0 评论 -
栈的简单实现
public class ST { Object[] objs; int size;//获取当前栈的容量 public ST(int MaxLen){ this.objs=new Object[MaxLen]; } //进行压栈操作 public void push(Object x){ //先给当前指针赋值,然后指...转载 2019-07-09 21:18:51 · 109 阅读 · 0 评论 -
二分法查找有序数组
public static int Search(int[] nums,int target){ int start=0; int end=nums.length-1; while(true){ int midle=(start+end)/2; int midVal=nums[midle]; ...转载 2019-07-04 22:21:47 · 325 阅读 · 0 评论 -
leetCode四数之和
18.给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组...转载 2019-06-29 22:45:47 · 306 阅读 · 0 评论 -
leetCode最小路径和
64.给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。解法:public static int minPathSum(int[][] grid){ int[][] dp = new int[grid.length][grid[0].length]; for(int ...转载 2019-07-10 22:40:43 · 121 阅读 · 0 评论 -
leetCode加一
66.给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/plus-one解法:public static int[] plusOne(int...转载 2019-07-15 22:27:01 · 85 阅读 · 0 评论 -
原地算法
https://www.jianshu.com/p/567b1dc38db7转载 2019-07-15 22:31:58 · 408 阅读 · 0 评论 -
leetCode矩阵置零
73.给定一个m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。解法:public void setZeroes(int[][] matrix) { int row=matrix.length;//二维数组行的长度 int col=matrix[0].length;//二维数组列的长度 Set&l...转载 2019-07-15 22:53:25 · 167 阅读 · 0 评论 -
leetcode最接近的3数之和
16.给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum-closest著作权归领扣网络所有。解法:public static ...转载 2019-06-27 21:23:52 · 87 阅读 · 0 评论 -
leetCode 盛水最多的容器
11.图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。解法:public static void main(String[] args) { int[] a={1,2,8,6,5,9}; int area=maxArea(a); System.out....转载 2019-06-27 20:46:03 · 210 阅读 · 0 评论 -
leetCode搜索插入位置
35.给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。解法: public static int searchInsert(int[] nums, int target) { int i; for(i=0;i<nums.length;i++)...转载 2019-07-07 16:47:34 · 211 阅读 · 0 评论 -
leetCode整数反转
7.给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321解法:public static void main(String[] args) { int x=123400; String s1=reverse(x); System.out.println(s1); ...转载 2019-06-26 20:07:51 · 89 阅读 · 0 评论 -
LeetCode组合总和
39.给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。来源:力扣(LeetCode)链接:https://leetcode-cn.com...转载 2019-07-07 19:47:52 · 162 阅读 · 0 评论 -
选择排序
public static void main(String[] args) { int[] nums={9,8,0,7,4,6,5,3,2,4,1}; int t; for(int i=0;i<nums.length-1;i++){ for(int j=i+1;j<nums.lengt...转载 2019-07-07 20:30:23 · 66 阅读 · 0 评论 -
插入排序
public static void main(String[] args) { int[] nums={2,3,5,4,8,7,6,0,9,1}; int t; int i,j; for(i=1;i<nums.length;i++){//从第二个数开始,把每个数拿出插到前面的有序数字中,i前的数是有序的 ...转载 2019-07-07 21:13:13 · 93 阅读 · 0 评论 -
leetCode判断回文数
9.判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。解法:public static void main(String[] args) { int x=10; boolean b=isPalindrome(x); System.out.print(b); } public static...转载 2019-06-26 21:06:04 · 170 阅读 · 0 评论 -
leetCode 删除排序数组中的重复项
26.给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array解法:...转载 2019-07-02 21:17:23 · 61 阅读 · 0 评论 -
leetCode 移除元素
27.给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-...转载 2019-07-02 21:53:48 · 73 阅读 · 0 评论 -
冒泡排序
public static void main(String[] args) { //冒泡排序 int[] a={1,2,6,4,9,0,8,3,7,5}; int t; for(int i=1;i<a.length;i++){ for(int j=0;j<a.length-1;j++){ ...原创 2019-06-11 10:52:07 · 74 阅读 · 0 评论 -
数据结构的特性
1.数组 插入快,如果知道下标,存取非常快 但是查找慢,删除慢,大小固定2.有序数组 比无序数组查找快 删除和插入慢 大小固定3.栈 后进先出的方式存取 存取其他项很慢4.队列 先进先出的方式存取 存取其他项很慢5.链表 插入快,删除快 查找慢6.二叉树 查找、插入、删除都快(如果树保持平衡) 删除算法复杂7.红黑树 查找、插入、删除都快。...转载 2019-06-24 21:04:51 · 465 阅读 · 0 评论 -
leetCode最大子序和
53.给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。解法:public static int maxSubArray(int[] nums) { int ans=nums[0]; int sum=0; for(int a:nums){ if(sum&...转载 2019-07-08 21:54:19 · 94 阅读 · 0 评论 -
leetCode寻找两个有序数组中位数
4.给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]来源...转载 2019-06-25 21:23:20 · 135 阅读 · 0 评论