![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Data structure
文章平均质量分 50
gary-liu
Like technology, like recording life. Since I went to a foreign company, I have to use English to quickly integrate it. WeChat Offical account: gary_foreign
展开
-
两个数组A和B的长度相同,找出 A[i] > B[i] 数量最多的A的一个排序结果,保证A对应B的顺序不变
题目 两个数组A和B的长度相同,找出 A[i] > B[i] 数量最多的A的一个排序结果,保证A对应B的顺序不变 A=[2,5,9,1] B=[6,3,7,4] 因为A[i] > B[i]的数共有两个,比如A的一个结果可以是 A=[9,1,2,5]分析 对B排序获得新数组:bSort=[3,4,6,7],被使用过后就把值改为 -1 (或者其他标志性的值) bSort 相对于B数组的顺序索引数组:bLocation=[1,3,0,2]原创 2020-12-30 15:36:00 · 753 阅读 · 0 评论 -
堆排序——java实现
堆定义可以参考这篇文章(有排序图形过程很赞)图解排序算法(三)之堆排序这里以大顶堆为例,构建一个二叉树,根节点要满足大于左右子节点。用数组表示一个堆,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] 排序过程这里以构建大顶堆为例先构建一个大顶堆,构建过程原创 2020-12-18 14:18:25 · 265 阅读 · 1 评论 -
归并排序——java实现
分析归并排序的思想主要是分而治之,先将数组像二叉树一样拆分成多个,然后对每个部分排序,排序后的数组再逐渐合并到一起。具体分析过程可以看这篇文章(图画的很赞) 归并排序代码 public static void mergeSort(int[] arr){ int len = arr.length; //临时数组存放每段排好序的数组 int[] temp = new int[len]; splitSort(arr, 0, len-1, tem原创 2020-12-12 20:49:21 · 179 阅读 · 2 评论 -
Leetcode53 最大子序和
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。分析代码public static int largestSubArray(int[] a){ if(a == null || a.length == 0){ return 0; } int原创 2020-12-12 17:55:16 · 238 阅读 · 0 评论 -
LeetCode415 字符串相加
题目字符串相加124123142414121431 + 123124151515121 = ?分析双指针两个字符串倒着相加,指针下标为负数数时补0代码public static String addLargeNums(String a, String b){ int len1 = a.length(); int len2 = b.length(); if(len1 == 0){ return b; }原创 2020-12-12 16:59:43 · 180 阅读 · 1 评论 -
LeetCode88 合并有序数组
题目/** * ClassName: MergeSortArray <br/> * Function: 合并有序数组<br/> * [1, 2, 2, 5] * [3, 4, 7, 8] * * */分析双指针移动从前往后的比较代码public static int[] mergeSortArray(int[] a, int[] b){ int length1 = a.length, length2 = b.length;原创 2020-12-12 16:18:54 · 1072 阅读 · 2 评论 -
Leetcode257二叉树所有路径及路径和
文章目录题目一:二叉树所有路径分析代码变形: 所有路径和题目描述分析代码结果参考资料题目一:二叉树所有路径/** * ClassName: LeetCode257SumTree <br/> Function: <br/> * * 给定一个二叉树,返回所有从根节点到叶子节点的路径。 * * 说明: 叶子节点是指没有子节点的节点。 * * 输入: * * 1 * / \ * 2 3 * \ * 5 * * 输出:原创 2020-12-12 15:19:13 · 267 阅读 · 2 评论 -
顺时针打印矩阵
题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7] 限制:0 <= matrix.length <= 1000 <= matrix[i].length原创 2020-12-05 20:29:35 · 203 阅读 · 0 评论 -
三色球
题目有红、黄、蓝三种颜色的气球。在牛客王国,1个红气球+1个黄气球+1个蓝气球可以兑换一张彩票。2个红气球+1个黄气球可以兑换1个蓝气球。2个黄气球+1个蓝气球可以兑换1个红气球。2个蓝气球+1个红气球可以兑换1个黄气球。现在牛牛有a个红气球,b个黄气球, c个蓝气球,牛牛想知道自己最多可以兑换多少张彩票。示例1:输入1,7,5输出3说明可以用4个黄气球和2个蓝气球换2个红气球,这样就有了3个红气球,3个黄气球,3个蓝气球,可以换3个彩票。备注:0≤a,b,c≤1e9第原创 2020-11-19 01:18:22 · 929 阅读 · 0 评论 -
leetcode134 加油站
题目在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入: gas = [1,2,3,4,5]cost = [3,4,5,1,2转载 2020-11-18 01:39:38 · 111 阅读 · 0 评论 -
leetCode670 最大交换
题目给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例:输入: 2736输出: 7236解释: 交换数字2和数字7。输入: 9973输出: 9973解释: 不需要交换。注意:给定数字的范围是 [0, 108]解法解法一像冒泡排序一样循环和前面固定一位数字比较,如果比前面大就交换,解法二leetcode 给的官方解法思路:代码实现:public static int swap2maxNum(int num) { char[]原创 2020-11-18 00:59:52 · 140 阅读 · 0 评论 -
求m的n次方
方法递归法二分法,不断将n二分有点难得理解,是将n化成二进制,然后把1的那些数位乘起来,我也没看懂可以直接参考 求m的n次方代码实现这里给出递归和二分法的实现 /** * 递归法 * @param m * @param n * @return */ public static Long nthPowerRecursion(int m, int n){ if(n == 0){ return 1L;原创 2020-11-14 12:06:45 · 1551 阅读 · 0 评论 -
多线程顺序打印123
synchronized实现public class OrderPrint { private static Integer num = 1; static class Thread1 implements Runnable{ @Override public void run(){ while (true){ synchronized (this){ if(原创 2020-11-07 17:42:17 · 728 阅读 · 0 评论 -
求树的高度
方法递归求树高度层次遍历记录树高后序遍历,结点最大栈长即为二叉树的高度递归public static int height(TreeNode root){ if(root == null){ return 0; } int m = height(root.getLeft()); int n = height(root.getRight()); return m > n ? m+1 :原创 2020-11-07 17:15:25 · 675 阅读 · 0 评论 -
LeetCode20. 有效的括号
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 :输入: "([)]"输出: false输入: "{[]}"输出: true分析栈解答public boolean isValid(String s) { int n = s.length(); if (n % 2 == 1)转载 2020-10-26 02:45:14 · 156 阅读 · 0 评论 -
LeetCode68 二叉树的最近公共祖先
题目分析复杂度分析:时间复杂度 O(N): 其中 NN 为二叉树节点数;最差情况下,需要递归遍历树的所有节点。空间复杂度 O(N) : 最差情况下,递归深度达到 NN ,系统使用 O(N)O(N) 大小的额外空间剑指 Offer 68 - II. 二叉树的最近公共祖先解答 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null || r转载 2020-10-26 02:20:07 · 120 阅读 · 0 评论 -
最长公共子串
题目有两个字符串(可能包含空格),请找出其中最长的公共连续子串,输出其长度。(长度在1000以内)例如:输入:abcde bcd输出:3分析推到过程有点麻烦,还是直接看这两篇的分析吧动态规划经典例题——最长公共子序列和最长公共子串最长公共子串(动态规划)解答 /** * 最长公共子串 * @param s * @param t * @return */ public static int getLCS(String s, Str原创 2020-10-26 02:02:36 · 197 阅读 · 0 评论 -
LeetCode1143 最长公共子序列
题目给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。分析动态规划来自 1143. 最长公共子序列解答 pu原创 2020-10-26 01:38:52 · 142 阅读 · 0 评论 -
Leetcode 121 买卖股票的最佳时机
Leetcode121 题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买原创 2020-10-25 23:52:09 · 112 阅读 · 0 评论 -
LeetCode 922 按奇偶排序数组 II
题目给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。分析双指针指针 i 只遍历偶数位,指针 j 只遍历奇数位i 指针遍历偶数位发现是奇数时,则从 j 指针中找出一个偶数并与之交换时间复杂度:原创 2020-10-25 18:01:14 · 110 阅读 · 0 评论 -
有序数组中找a+b=m的数据对
题目给定升序整形数组和m,a和b是数组中的两个元素;求a+b=m的数据对有多少?输入数组 [1, 2, 4, 5, 6, 7], m = 9,输出 [2, 7], [4, 5]分析双指针i,j 前后找求和和m比较,大于m后移 j,小于m 前移 i解答public static void main(String[] args) { int[] num = {1, 2, 4, 5, 6, 7}; System.out.println(findList(num,原创 2020-10-25 17:36:39 · 627 阅读 · 4 评论 -
leetcode 146 LRU缓存机制
题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。示例:LRUCach转载 2020-10-25 15:00:55 · 175 阅读 · 0 评论 -
二维矩阵从左上角到右下角路径数及最小路径和
从左上角到右下角路径数 LeetCode 62动态规划法class Solution { public int uniquePaths(int m, int n) { int[][] dp = new int[m][n]; for (int i = 0; i < n; i++) dp[0][i] = 1; for (int i = 0; i < m; i++) dp[i][0] = 1; for (int i = 1;转载 2020-10-24 23:19:47 · 2364 阅读 · 0 评论 -
最长回文子串-java版
题目LeetCode 5给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解法暴力尝试找出字符串的所有子串判断是否是回文子串,如果是找出其中的最大长的/** * 判断是否是回文 * @param str * @return */ public static bo原创 2020-10-24 20:23:06 · 735 阅读 · 0 评论 -
判断二叉树是否对称-java
问题判断二叉树是否对称分析节点的左右子树为空,则直接返回true节点的左右子树有一个为空,则直接返回false节点的左右子树均不为空,则判断节点的左右子节点的值是否相等代码public static boolean isSymmetric(TreeNode root){ if(root == null){ return true; } return symmetric(root.getLeft(), root.getR原创 2020-07-12 17:33:26 · 373 阅读 · 0 评论 -
求两个单链表的交点
问题求两个单链表的交点分析将长的链表移动长度差的距离,然后同时移动两个链表,找到第一个相等的节点代码public static List<ListNode> init2IntersectionList(){ List<ListNode> list = new ArrayList<>(); ListNode head1 = new ListNode(0); ListNode head2 = new ListNode(原创 2020-07-12 15:03:40 · 311 阅读 · 0 评论 -
Generate Parentheses 生成括号 LeetCode 22
问题Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.For example, given n = 3, a solution set is:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]分析递归的思想if (左右括号都已用完) { 加入解集,返回}//否则开始试各种选择i原创 2020-07-12 12:41:27 · 175 阅读 · 0 评论 -
寻找旋转排序数组中的最小值或某个值
问题假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。你可以假设数组中不存在重复的元素。样例给出[4,5,6,7,0,1,2] 返回 0假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。数组中可能存在重复的元素。样例给出[4,4,5,6,7,0,1,2] 返回 0判断旋转排序数组(元素不重复)是否原创 2020-07-12 11:28:54 · 254 阅读 · 0 评论 -
打印等腰三角形
问题输入n 行,打印出等腰三角形,等腰三角形可能有这两种形式 * *** ***** ******* *********------另一种等腰三角形图形-------- * * * * * * * * * * * * * * *分析先输出每行前面的空格,然后输出“”,每行有 2n-1 个 “*”代码 public static void printPic(int n){ for (int i = 1; i <=原创 2020-07-12 03:35:49 · 880 阅读 · 0 评论 -
单链表反转
链表初始化public class ListNode { int value; ListNode next; public ListNode(int value){ this.value = value; } }递归实现/** * 递归实现 * @param head * @return */ public static ListNode invertList(ListNode head){原创 2020-06-21 18:16:52 · 184 阅读 · 0 评论 -
二叉树反转-java实现
初始化二叉树见blog文章层序遍历 /** * init tree 1 2 3 4 null 5 6 * 1 * 2 3 * 4 null 5 6 * */反转递归实现/** * 反转树递归实现 * @param root */ public static TreeNode invertTreeRecursion(TreeNode root){原创 2020-06-20 23:23:33 · 394 阅读 · 0 评论 -
二叉树的深度(前序、中序、后续)遍历-java实现
初始化参见本博客里的 二叉树层次遍历 ,树结构如下。/** * init tree 1 2 3 4 null 5 6 * 1 * 2 3 * 4 null 5 6 * */递归实现 /** * 前序递归实现 * @param root */ public static void preOrderTraversal(TreeNode root){原创 2020-06-20 21:10:42 · 277 阅读 · 0 评论 -
二叉树的层次遍历和分层遍历,每层个数,打印每层最左端节点
初始化二叉树package com.zhenxing.garypractice.algorithm.structure;/** * ClassName: Tree structure <br/> Function: <br/> * * @author zhenxing.liu * @date 2020/6/20 */public class TreeNode { TreeNode left; TreeNode right; int v原创 2020-06-20 17:04:40 · 1227 阅读 · 0 评论 -
各种排序算法(2)——二路归并,堆排序
排序属于最基础的,唉!必须熟练掌握啊原创 2014-04-24 11:31:09 · 1618 阅读 · 0 评论 -
判断回文数
两种判断回文数的方法原创 2014-05-11 02:16:28 · 1456 阅读 · 0 评论 -
重写strcpy和最长的数字子串
重写strcpy时不明白返回temp,为什么不可以返回strDest,求解答???原创 2014-05-12 00:09:23 · 1242 阅读 · 0 评论 -
二叉树的创建及递归和非递归遍历
一直知道个大概,没动手实现过,今天自己原创 2014-04-26 16:26:07 · 2192 阅读 · 0 评论 -
大数乘法
本文摘自www.csdn.net 的PinkRobin的博文,自勉并献于大家,以共享!近期学习STL,愈发感觉C++之博大精深。一个vector就包含着诸多内容。而语言只是工具,学习语言目的是为了解决问题。近期又是一年复试时,而复试上机有许多学校考察了大数运算方面的知识,例如大数加法、大数乘法和间接考察相关知识的大数阶乘。在学习vector时,突然发现用vector可以很方便的实现大数乘法转载 2013-12-15 21:20:15 · 1413 阅读 · 0 评论 -
二叉树的层次遍历,从上到下和从下到上分层打印
用queue和vector都可以实现层次遍历原创 2014-04-26 22:07:10 · 3447 阅读 · 2 评论 -
各种排序算法——冒泡,插入,选择,希尔,快排
自己抽时间总结并写了一下基本排序算法的实现。#include <iostream>#include <vector>using namespace std;//冒泡排序void bubbleSort(int *a,int length){ if(a==NULL || length==0) cout<<"illegal"<<endl...原创 2014-04-23 14:35:21 · 1674 阅读 · 0 评论