
数据结构与算法
小草dym
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
146. LRU 缓存机制
class LRUCache { class Node{ public int key; public int value; public Node prev; public Node next; public Node(){} public Node(int key,int value){ this.key=key; this.value=value;.原创 2021-11-16 13:16:14 · 1180 阅读 · 0 评论 -
23. 合并K个升序链表
class Solution { public ListNode mergeKLists(ListNode[] lists) { if(lists==null||lists.length==0) return null; for(int i=1;i<lists.length;i++){ lists[i]=mergeTwoLists(lists[i],lists[i-1]); } return lists[.原创 2021-10-13 18:30:57 · 850 阅读 · 0 评论 -
约瑟夫环的问题--剑指 Offer 62. 圆圈中最后剩下的数字
class Solution { // f(n, m) = (f(n – 1, m) + m) % n public int lastRemaining(int n, int m) { return (n == 1) ? 0 : (lastRemaining(n - 1, m) + m) % n; }}原创 2021-09-29 21:58:32 · 917 阅读 · 0 评论 -
50. Pow(x, n)
class Solution { // T(n) = T(n/2) + O(1) = O(logn) public double myPow(double x, int n) { if (n == 0) return 1; if (n == -1) return 1 / x; double half = myPow(x, n >> 1); half *= half; // 是否为奇数 .原创 2021-09-29 20:00:32 · 222 阅读 · 0 评论 -
99. 恢复二叉搜索树
root 是一棵错误的二叉搜索树(有2个节点被错误交换)发生在逆序对的头,尾这两个位置第2个错误节点:最后一个逆序对中较小的那个节点 second/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val原创 2021-09-25 00:33:39 · 156 阅读 · 0 评论 -
234.回文链表(判断一个链表是不是回文链表)
/** * 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 = next; } *...原创 2021-08-21 21:18:54 · 227 阅读 · 0 评论 -
1. 两数之和
class Solution { public int[] twoSum(int[] nums, int target) { if (nums == null) return null; Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { Integer idx = map.g...原创 2021-08-18 17:43:32 · 183 阅读 · 0 评论 -
155. 最小栈
设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。class MinStack { /* 用来存放正常数据 */ private Stack<Integer> stack; /* 用来存放最小数据 */ private Stack<Integer> minStack; /** initialize your data structure here. */ public MinStack() { ...原创 2021-07-03 17:44:52 · 157 阅读 · 0 评论 -
141. 环形链表—— 快慢指针的思想
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public boolean hasCycle(ListNode head)...原创 2021-06-27 15:06:30 · 245 阅读 · 0 评论 -
206. 反转链表
使用递归的方式/** * 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 = n..原创 2021-06-27 14:49:11 · 186 阅读 · 0 评论 -
237. 删除链表中的节点
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = n...原创 2021-06-27 14:12:33 · 155 阅读 · 0 评论 -
86. 分隔链表
/** * 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 = next; }...原创 2021-06-19 14:51:35 · 146 阅读 · 0 评论 -
160. 相交链表
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode getIntersecti...原创 2021-06-19 14:28:23 · 112 阅读 · 0 评论 -
2. 两数相加
/** * 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 = next; }...原创 2021-06-19 13:53:52 · 146 阅读 · 0 评论 -
203. 移除链表元素
/** * 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 = next; }...原创 2021-06-19 13:30:43 · 134 阅读 · 0 评论 -
链表题的解题思路
原创 2021-06-19 11:44:39 · 118 阅读 · 0 评论 -
16.16. 部分排序
class Solution { public int[] subSort(int[] nums) { if (nums.length == 0) return new int[] { -1, -1 }; // 从左扫描到右寻找逆序对(正序:逐渐变大) int max = nums[0]; // 用来记录最右的那个逆序对位置 int r = -1; for (int i = 1; i < nums.length; i...原创 2021-06-19 11:29:11 · 143 阅读 · 0 评论 -
75. 颜色分类
/* * 一个只包含0、1、2的整型数组,要求对它进行【原地】排序 * 你能想出一个仅使用常数空间的一趟扫描算法吗? * * 空间复杂度O(1),时间复杂度O(n) */class Solution { public void sortColors(int[] nums) { int i = 0; int l = 0; int r = nums.length - 1; while (i <= r) { if (n...原创 2021-06-19 10:44:58 · 127 阅读 · 0 评论 -
88. 合并两个有序数组
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { // nums1 = [1,3,5,0,0,0], m = 3 // nums2 = [2,4,6], n = 3 int i1 = m - 1; int i2 = n - 1; int cur = nums1.length - 1; while (i2 >.原创 2021-06-17 20:45:36 · 102 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
* 去以root为根节点的二叉树中查找p、q的最近公共祖先 * ① 如果p、q同时存在于这棵二叉树中,就能成功返回它们的最近公共祖先 * ② 如果p、q都不存在于这棵二叉树中,返回null * ③ 如果只有p存在于这棵二叉树中,返回p * ④ 如果只有q存在于这棵二叉树中,返回q下面的这种写法是错误的/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeN.原创 2021-05-28 00:06:35 · 126 阅读 · 0 评论 -
5. 最长回文子串——基于扩展中心法的优化
class Solution { public String longestPalindrome(String s) { if (s == null) return null; char[] cs = s.toCharArray(); if (cs.length <= 1) return s; // 最长回文子串的长度(至少是1) int maxLen = 1; // 最长回文子串的开始索引 int begin = 0;原创 2021-05-27 23:20:47 · 146 阅读 · 0 评论 -
5. 最长回文子串——暴力法---动态规划解法---扩展中心法
暴力法动态规划解法class Solution { public String longestPalindrome(String s) { if (s == null) return null; char[] cs = s.toCharArray(); if (cs.length <= 1) return s; // 最长回文子串的长度(至少是1) int maxLen = 1; // 最长...原创 2021-05-27 21:41:04 · 195 阅读 · 0 评论 -
226. 翻转二叉树
前序遍历的方式/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNod...原创 2021-05-16 14:32:02 · 172 阅读 · 0 评论 -
72. 编辑距离
class Solution { public int minDistance(String word1, String word2) { if (word1 == null || word2 == null) return 0; char[] cs1 = word1.toCharArray(); char[] cs2 = word2.toCharArray(); int[][] dp = new int[cs1.lengt...原创 2021-05-13 21:59:44 · 135 阅读 · 0 评论 -
动态规划----解121. 买卖股票的最佳时机---最大连续子序列和
原创 2021-05-12 20:34:43 · 159 阅读 · 0 评论 -
121. 买卖股票的最佳时机
class Solution { public int maxProfit(int[] prices) { if (prices == null || prices.length == 0) return 0; // 前面扫描过的最小价格 int minPrice = prices[0]; // 前面扫描过的最大利润 int maxProfit = 0; // 扫描所有的价格 for (int i = 1; i &l...原创 2021-05-12 20:34:33 · 122 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
class Solution { public int maxValue(int[][] grid) { int rows = grid.length; int cols = grid[0].length; int[][] dp = new int[rows][cols]; dp[0][0] = grid[0][0]; // 第0行 for (int col = 1; col < cols; col++) { ...原创 2021-05-12 20:34:26 · 135 阅读 · 0 评论 -
3. 无重复字符的最长子串
class Solution { public int lengthOfLongestSubstring(String s) { if (s == null) return 0; char[] chars = s.toCharArray(); if (chars.length == 0) return 0; // 用来保存每一个字符上一次出现的位置 Map<Character, Integer> prevIdxe...原创 2021-05-12 20:34:19 · 109 阅读 · 0 评论 -
151. 翻转字符串里的单词
消除字符串中的多余空格class Solution { public static String reverseWords(String s) { if (s == null) return ""; char[] chars = s.toCharArray(); // 消除多余的空格 // 字符串最终的有效长度 int len = 0; // 当前用来存放字符的位置 int cur = 0;原创 2021-05-08 21:51:54 · 155 阅读 · 0 评论 -
求最大连续子序列和——动态规划
class Solution { public int maxSubArray(int[] nums) { if (nums == null || nums.length == 0) return 0; int[] dp = new int[nums.length]; dp[0] = nums[0]; int max = dp[0]; for (int i = 1; i < dp.length; i++) { int prev = dp[i - 1];...原创 2021-05-08 21:51:24 · 208 阅读 · 0 评论 -
322. 零钱兑换
class Solution { public int coinChange(int[] coins, int amount) { if(amount==0) return 0; if (coins == null || coins.length == 0) return -1; int[] dp = new int[amount + 1]; for (int i = 1; i <= amount; i++) { int min = Integer.M...原创 2021-05-08 21:51:08 · 111 阅读 · 0 评论 -
求最大连续子序列和——解法1 – 暴力出奇迹||解法2 – 分治
解法1 – 暴力出奇迹穷举出所有可能的连续子序列,并计算出它们的和,最后取它们中的最大值空间复杂度:O(1),时间复杂度:O (n 3)class Solution { public int maxSubArray(int[] nums) { if (nums == null || nums.length == 0) return 0; int max = Integer.MIN_VALUE; for (int begin =...原创 2021-05-07 22:23:28 · 244 阅读 · 0 评论 -
N皇后的问题——算法的思想:回溯和剪枝
package com.dym;public class Queens { public static void main(String[] args) { // TODO Auto-generated method stub new Queens().placeQueens(4); } /** * 数组索引是行号,数组元素是列号 */ int[] cols; /** * 一共有多少种摆法 */ int ways; void placeQueens(in.原创 2021-05-05 14:05:51 · 315 阅读 · 0 评论 -
并查集
UnionFind.javapackage com.dym.union;public abstract class UnionFind { protected int[] parents; public UnionFind(int capacity) { if (capacity < 0) { throw new IllegalArgumentException("capacity must be >= 1"); } parents = new ...原创 2021-05-02 16:22:41 · 123 阅读 · 0 评论 -
计数排序 ——如何对一个省200万学生的高考成绩(假设成绩最多只有2位小数,0~900范围)进行排序,用尽可能高效的算法
package com.dym;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.Unsupported.原创 2021-04-13 22:37:43 · 355 阅读 · 0 评论 -
单链表按顺序插入节点
//第二种方式在添加英雄时,根据排名将英雄插入到指定位置 //(如果有这个排名,则添加失败,并给出提示) public void addByOrder(HeroNode heroNode) { //因为头节点不能动,因此我们仍然通过一个辅助指针(变量)来帮助找到添加的位置 //因为单链表,因为我们找的temp 是位于 添加位置的前一个节点,否则插入不了 HeroNode temp = head; boolean f...原创 2021-03-20 21:58:52 · 393 阅读 · 0 评论 -
单链表的创建示意图, 显示单向链表的分析
SingleLinkedListDemo.javapackage com.dym.linkedlist;import java.util.Stack;public class SingleLinkedListDemo { public static void main(String[] args) { //进行测试 //先创建节点 HeroNode hero1 = new HeroNode(1, "宋江", "及时雨"); HeroNode hero2 = new ...原创 2021-03-20 21:34:35 · 503 阅读 · 2 评论 -
数组模拟环形队列
将数组看做是一个环形的。(通过取模的方式来实现即可)分析说明:1)尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候 需要注意 (rear + 1) % maxSize == front 满] 2)rear == front [空]...原创 2021-03-20 20:46:01 · 120 阅读 · 0 评论 -
数组模拟队列
数组模拟队列出队列操作getQueue显示队列的情况showQueue查看队列头元素headQueue退出系统exitArrayQueueDemo.javapackage com.dym.queue;import java.util.Scanner;public class ArrayQueueDemo { public static void main(String[] args) { //测试一把 //创建一个队列 .原创 2021-03-20 18:47:18 · 105 阅读 · 0 评论 -
常见的排序
不稳稳不不稳不稳稳稳原创 2021-03-12 20:54:11 · 98 阅读 · 0 评论