
Java数据结构与算法
记录以Java语言为基础的数据结构与算法的学习。供朋友们学习和参考。
NJUSTZJC
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
长度最小的子数组
长度最小的子数组class Solution { public int minSubArrayLen(int target, int[] nums) { int left = 0; int right = 0; int sum = 0; int result = Integer.MAX_VALUE; while(right<nums.length){ sum += nums[right]原创 2021-11-08 11:42:44 · 4492 阅读 · 0 评论 -
有序数组的平方
有序数组的平方class Solution { public int[] sortedSquares(int[] nums) { int newarr[] = new int [nums.length]; int left = 0; int right = nums.length-1; int index = newarr.length-1; while(left<=right){ i原创 2021-11-08 11:30:16 · 3993 阅读 · 0 评论 -
数组中移除元素
数组中移除元素class Solution { public int removeElement(int[] nums, int val) { int fast; int slow = 0; for(fast = 0;fast<nums.length;fast++){ if(nums[fast] != val){ nums[slow] = nums[fast];原创 2021-11-07 23:34:47 · 102 阅读 · 0 评论 -
搜索插入位置
搜索插入位置class Solution { public int searchInsert(int[] nums, int target) { int left = 0; int right = nums.length; while(left<right){ int mid = left+(right-left)/2; if(nums[mid] == target){原创 2021-11-07 23:01:10 · 69 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置(即左边界和右边界)
在排序数组中查找元素的第一个和最后一个位置(即左边界和右边界)//最后left和right肯定会聚集到target上。@SuppressWarnings({"all"})class Solution { public int[] searchRange(int[] nums, int target) { int jieshu[] = {-1,-1}; int left = 0; int right = nums.length;原创 2021-11-07 22:44:31 · 493 阅读 · 0 评论 -
二分查找法-查找target特定元素
二分查找法-查找target特定元素class Solution { public int search(int[] nums, int target) { int left = 0; int right = nums.length; while(left < right){ int mid = left +(right-left)/2; if(nums[mid] == target){原创 2021-11-07 16:38:48 · 199 阅读 · 0 评论 -
有效的括号
有效的括号1,2两种情况在遍历的时候要考虑。3 情况在最后考虑。另外就是要分明:遇到左括号怎么办?遇到右括号怎么办?要分开来说明。import java.util.HashMap;import java.util.Map;import java.util.Stack;public class youxiaokuohao{ public static void main(String[] args){ Solution so = new Solution();原创 2021-10-31 16:08:55 · 92 阅读 · 0 评论 -
用队列来实现栈
用队列来实现栈import java.util.LinkedList;import java.util.Queue;class MyStack { Queue<Integer> mainq = new LinkedList<>(); Queue<Integer> backUpq = new LinkedList<>(); public MyStack() { } public void push(int x原创 2021-10-24 22:10:33 · 69 阅读 · 0 评论 -
用栈来实现队列
用栈来实现队列import java.util.Stack;//public class main {// public static void main(String[] args) {//// }//}class MyQueue { Stack<Integer> inStack = new Stack<>(); Stack<Integer> outStack = new Stack<>(); pu原创 2021-10-24 21:44:02 · 76 阅读 · 0 评论 -
最小栈方法的构造-辅助栈
最小栈方法的构造-辅助栈import java.util.Stack;//public class main{// public static void main(String[] args){// MinStack minStack = new MinStack();// minStack.push(-2);// minStack.push(0);// minStack.push(-3);// System原创 2021-10-24 20:57:03 · 78 阅读 · 0 评论 -
用ArrayList模拟栈
用ArrayList模拟栈import java.lang.reflect.Array;import java.util.ArrayList;import java.util.List;public class main{ public static void main(String[] args){ stackDemo s = new stackDemo(); s.push(1); s.push(2); s.push(3原创 2021-10-24 17:06:59 · 372 阅读 · 0 评论 -
移除链表元素
移除链表元素 //创建一个虚拟头结点 ListNode dummyNode=new ListNode(val-1); dummyNode.next=head; ListNode prev=dummyNode; //确保当前结点后还有结点 while(prev.next!=null){ if(prev.next.val==val){ prev.next=prev.nex原创 2021-10-22 17:29:00 · 85 阅读 · 0 评论 -
删除链表的倒数第n个结点
删除链表的倒数第n个结点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next原创 2021-10-22 11:20:51 · 60 阅读 · 0 评论 -
返回相交链表的起始节点
返回相交链表的起始节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } *//** * Definition for singly-linked list. * pub原创 2021-10-22 10:41:43 · 76 阅读 · 0 评论 -
环形链表Ⅱ
环形链表Ⅱ/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode detectCycle(ListNod原创 2021-10-21 19:50:48 · 84 阅读 · 0 评论 -
环形链表与否判断
环形链表与否判断/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ //如果fast没有走到链表结尾的时候(fast =!= null && fast.next !原创 2021-10-21 19:41:31 · 83 阅读 · 0 评论 -
反转链表的构造
反转链表双指针的应用 pre和cur/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.原创 2021-10-21 19:21:52 · 68 阅读 · 0 评论 -
双链表的设计
// public class List{// public static void main(String[] args){// MyLinkedList linkedList = new MyLinkedList();// linkedList.addAtHead(1);// linkedList.addAtTail(3);// linkedList.addAtIndex(1,2); //链表变为1-> 2-&g原创 2021-10-20 20:49:13 · 152 阅读 · 0 评论 -
HashSet的add方法流程(底层是HashMap的put方法)
HashSet的put方法流程因为一开始是数组里面是空的,所以添加第一个元素的时候,直接根据计算出的索引值放入对应的位置。然后会判断此时数组里面的size数是否超过threshold(阀值),如果超过了。则会进行resize()扩容,很明显,现在没超过。下面继续添加元素,还是先计算该元素的hash值,如果hash不冲突,同第一个元素。如果hash冲突了。则分为三种情况。新添加的元素与该链表的表头结点的hash值一样且通过equals()方法判断下来也一样,则不添加,直接覆盖掉value。添加的原创 2021-10-19 15:19:39 · 539 阅读 · 0 评论 -
时间和空间复杂度
时间和空间复杂度时间复杂度算法运行时间为所有语句的语句频度之和。语句频度指的是每条语句的执行次数。时间复杂度:用算法运行时间的同阶无穷大来代表。计算时间复杂度的方法:级数求和计算时间复杂度的方法:对数计算时间复杂度:时间复杂度还和输入的数据集有关。空间复杂度...原创 2021-10-14 15:28:55 · 192 阅读 · 0 评论 -
循环队列的实现
队列原创 2021-10-14 13:05:06 · 85 阅读 · 0 评论 -
单链表的设计
//结点类class ListNode{int val;ListNode next;public ListNode(int val){this.val = val;}}//我的链表class MyLinkedList{int size;ListNode head;public MyLinkedList(){size = 0;head = new ListNode(0);}public int get(int index){ListNode currentNode = hea原创 2021-10-14 12:52:58 · 106 阅读 · 0 评论 -
线性结构和非线性结构
线性结构:顺序存储地址连续链式存储地址不连续非线性结构:原创 2021-10-12 10:17:11 · 70 阅读 · 0 评论