
数据结构与算法
HaoZz_96
这个作者很懒,什么都没留下…
展开
-
最长重复子串(不可重叠) Java
今天笔试碰到了这道题,记录一下做法,采用的是后缀数组题目描述:输入一个字符串,计算出字符串中两个最长重复子串,要求两个子串位置不能重叠输入:ababababc输出:4,因为abab和后面的abab重复,最长为4public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next();原创 2020-09-07 16:37:24 · 1492 阅读 · 0 评论 -
“回文“算法专题
1.回文数 ★#9 判断一个整数是否为回文数输入:121输出:trueclass Solution { public boolean isPalindrome(int x) { String numStr = String.valueOf(x); int len = numStr.length(); if(len<=3){ return numStr.charAt(0)==numStr.charAt(len-1)原创 2020-08-07 13:21:45 · 437 阅读 · 0 评论 -
递归回溯算法习题解析
“种一棵树”回溯题是笔试面试中经常考察的内容,如求一系列的组合问题,以及在一定规则下搜索出满足条件的集合。今天刷了一些回溯题,特此总结一下。回溯习题(全)电话键的组合括号生成回溯题型子集子集2组合组合总和组合总和2全排列全排列2字符串的排列字母大小写全排列搜索二进制的组合(手表灯)解数独N皇后单词搜索分割回文串先看一道组合题:电话键的组合输入一个字符串,返回其所有的可能组合类型输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”原创 2020-08-03 21:08:46 · 346 阅读 · 0 评论 -
动态规划之背包问题
坚持学习,坚持更新一.背包问题小明现在有一个容积为N的背包,现在他想装入总价尽可能贵的零食在里面,每个零食的体积和价值不一样,请你帮他设计方案来实现最贵零食组合。/** * @param volumes 每个零食的体积 * @param values 每个零食的价格 * @param capacity 小明包的容量 * @return 可以装下的最大价值 */ public int maxValueOfBag(int[] volumes,原创 2020-07-26 23:00:50 · 170 阅读 · 0 评论 -
LeetCode打家劫舍House-Robber-动态规划问题
1.打家劫舍 I你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。输入:[ 2, 1, 1, 2]输出:4解释:偷第一家和第四家金额最高1.定义dp数组dp[i]表示小偷光顾到第i家时可以拿到的最佳金额,注意,他可以选择偷或者不偷第i家,这取决于后面的状原创 2020-07-22 15:23:48 · 219 阅读 · 0 评论 -
LeetCode初级算法【链表专题】
1. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点思路 链表常用解法:双指针定位/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNo原创 2020-07-21 22:31:17 · 142 阅读 · 0 评论 -
LeetCode初级算法——【数组专题】
一. 删除排序数组中的重复项给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。在数组中灵活运用指针public int removeDuplicates(int[] nums) { int length = nums.length; int i = 0; for(int j=1;j<length;j++){ if(nums[i]!=n原创 2020-07-20 23:08:43 · 336 阅读 · 0 评论 -
动态规划专题学习
https://leetcode-cn.com/problems/wildcard-matching/solution/zi-fu-chuan-dong-tai-gui-hua-bi-xu-miao-dong-by-sw/动态规划解题框架:一.明确dp数组的含义构造一维dp[i]、二维dp[i][j],明确其代表了什么状态,一般与题目的目的有关。如解决通配符问题,就定义boolean[][] dp表示s[i-1]与p[j-1]的匹配成功与否;解决最长子数组问题,就定义dp[][]表示A[i-1]与B[原创 2020-07-06 18:03:00 · 268 阅读 · 0 评论 -
动态规划解决应用题:奇偶发牌洗牌
题目描述这道题想法不难,当前步的状态取决于上一步的状态,很明显想到动态规划DP,关键是注意好细节。下面附上代码,可能写的有些瑕疵,欢迎指正。public static void main(String[] args) { Scanner sc = new Scanner(System.in); //牌数 int n = sc.nextInt(); //洗牌次数 int k = sc.nextInt(); //牌 int[] arr = new i原创 2020-06-22 22:11:36 · 350 阅读 · 1 评论 -
leetcode78 求子集
问题描述:输入一个不包含重复数字的数组,要求输出这些数字的所有子集。例子:输入[1,2,3],应输出8个子集,包含空集和自身。[ [],[1],[2],[3],[1,3],[2,3],[1,2],[1,2,3] ]【思路1】递归/迭代从空集开始,保存当前集合到res,遍历下一个元素并添加到所有当前子集,重复红字直至最后。public List<List<Integer>> subsets(int[] nums) {List<List<Integer>&g原创 2020-06-20 11:09:25 · 258 阅读 · 0 评论 -
认识二叉搜索树,平衡二叉树,B树,B+树,红黑树
二叉搜索树BST是一种根节点的值大于左节点,小于右节点的排序树,英文BST。如果二叉排序树是平衡的,则n个节点的二叉排序树的高度为log2(n+1),其查找效率为O(log2n),近似于折半查找。如果二叉排序树完全不平衡,则其深度可达到n,查找效率为O(n),退化为顺序查找。因此,为了获得较好的查找性能,就要构造一棵平衡的二叉排序树。平衡二叉树AVL平衡二叉树在BST的基础上进行了改进,规定左子树和右子树高度差不超过1,使其不会退化为线性链表。AVL在查找和删除时需要进行旋转操作。AVL树的子节点原创 2020-06-15 16:26:11 · 216 阅读 · 0 评论 -
Java数据结构1:稀疏数组
1.使用场景保存棋盘信息,加载已保存棋盘棋子较少,而空白棋盘比较多,为了节省空间我们可以对二维数组进行压缩,成为稀疏数组。方法二维数组转稀疏数组:1.遍历原始的二维数组,记录有效的数据个数sum;2.根据sum创建稀疏数组sparseArr int[sum+1][3];3.再遍历二维数组将有效数据的值value填入稀疏数组。逆向操作:1.根据稀疏数组的第一行信息,创建原始...原创 2020-03-30 17:24:28 · 100 阅读 · 0 评论