![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
DataStructure_Algorithm_设计模式
文章平均质量分 51
DataStructure_Algorithm_设计模式
zhiyong_will
这个作者很懒,什么都没留下…
展开
-
每日一道leetcode:6. N 字形变换
【代码】每日一道leetcode:6. N 字形变换。原创 2023-04-05 10:55:02 · 365 阅读 · 0 评论 -
每日一道leetcode:4. 寻找两个正序数组的中位数
给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的 中位数。算法的时间复杂度应该为 O(log (m+n))。输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。原创 2023-04-05 10:41:43 · 569 阅读 · 0 评论 -
每日一道leetcode:8. 字符串转换整数 (atoi)
请你来实现一个函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的atoi函数)。函数的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正数。如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0。原创 2023-04-05 10:36:08 · 325 阅读 · 0 评论 -
每日一道leetcode:11. 盛最多水的容器
给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。:你不能倾斜容器。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。输入:height = [1,1]输出:1。原创 2023-03-12 15:50:57 · 272 阅读 · 0 评论 -
每日一道leetcode:7. 整数反转
给你一个 32 位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2, 2− 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。输入:x = 123输出:321输入:x = -123输出:-321输入:x = 120输出:21输入:x = 0输出:0。原创 2023-03-12 15:38:18 · 537 阅读 · 0 评论 -
每日一道leetcode:9. 回文数
若是不转换成字符串,那就需要将整数中的每一个数位上的数取出,放到翻转后对应的位置上,这里需要注意的是首先对负数判定,直接判定负数为不符合的。解释:从左向右读, 为 -121。从右向左读, 为 121-。的定义是按照中心轴翻转后是一致的,前有回文串的判定,那么可以将整数直接转成。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。注意:这里的y可能会超出int的表示范围,导致提交错误。解释:从右向左读, 为 01。例如,121 是回文,而 123 不是。,通过回文的判断翻转前后两者是一致的。原创 2023-03-12 15:27:11 · 185 阅读 · 0 评论 -
每日一道leetcode:5. 最长回文子串
给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。输入:s = “cbbd”输出:“bb”s。原创 2023-03-12 15:11:25 · 162 阅读 · 0 评论 -
每日一道leetcode:3. 无重复字符的最长子串
给定一个字符串s,请你找出其中不含有重复字符的的长度。输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。原创 2023-03-12 14:29:48 · 180 阅读 · 0 评论 -
每日一道leetcode:2. 两数相加
给你两个的链表,表示两个非负的整数。它们每位数字都是按照的方式存储的,并且每个节点只能存储数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.输入:l1 = [0], l2 = [0]输出:[0]输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]原创 2023-03-12 14:17:23 · 598 阅读 · 0 评论 -
每日一道leetcode:1. 两数之和
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。输入:nums = [3,2,4], target = 6输出:[1,2]原创 2023-03-12 14:07:18 · 213 阅读 · 0 评论 -
设计模式——类图以及类与类之间的关系
设计模式在程序设计上有着很重要的作用,使用设计模式可以使得代码更容易被理解,使得代码更规范,真正实现工程化。一、用UML表示一个类类图一般是三行的结构:类名称属性:格式(可见性 名称:类型[=缺省值])方法:格式(可见性 名称(参数列表)[返回类型])注:在Visio中的画的类图中使用的是C#的数据类型,与Java的略有差别。二、类与类之间的关系类与原创 2015-04-06 19:56:29 · 10062 阅读 · 2 评论 -
【数据结构与算法面试题】查找最小的k个数
题目来源“数据结构与算法面试题80道”。问题分析:这是一道比较经典的题目,查找最小的k个元素,最简单的方法就是对这n个整数排序,排序完成后,直接输出前k个最小的元素。那么最快的排序方法是快速排序,其算法的时间复杂度为O(nlogn)。是否还存在比这个更快的方法呢?方法一:利用快速排序的思想,时间复杂度为O(n)按照某个点将数组划分成左右两部分,左边的数都小于该划分节点,右边的数都大于该划分节点。如果最终该划分节点的位置小于k-1,则在右边节点中继续划分;如果最终该划分节点的位置大于k-1,则在左.原创 2021-06-15 23:04:20 · 336 阅读 · 2 评论 -
【数据结构与算法面试题】二叉树路径查找
题目来源“数据结构与算法面试题80道”。问题分析:核心是树的遍历,注意题目中“路径”的定义,是从根节点到叶子节点。先序遍历正好是从根节点开始,因此可以利用先序遍历的过程来实现这个过程。方法:void print_vector(vector<BinaryTreeNode *> &v){ vector<BinaryTreeNode *>::iterator it; for (it = v.begin(); it != v.end(); it ++){ prin.原创 2021-06-15 23:03:27 · 268 阅读 · 0 评论 -
【数据结构与算法面试题】子数组的最大和
题目来源“数据结构与算法面试题80道”。问题分析:在数组的每一个位置处保存当前的最大值,当前的最大值组成为:f(xi)={xi if i=0 or f(xi−1)⩽0f(xi−1)+xi if f(xi−1)>0f\left ( x_i \right )=\begin{cases}x_i & \text{ if } i=0\; or\;f\left ( x_{i-1} \right )\leqslant 0 \\ f\left ( x_.原创 2021-06-15 23:02:27 · 192 阅读 · 0 评论 -
【数据结构与算法面试题】包含min函数的栈
题目来源“数据结构与算法面试题80道”。问题分析:栈的特点是先进后出。要能够取出当前的最小值,需要用另一个栈保存当前的最小值,所以可采用“双栈”的结构,一个栈保存所有的值,另一个栈保存当前的最小值。方法:template <class Type> class min_stack{ private: stack<Type> s1; stack<Type> s2; public: min_stack(){} ~min_stack(){} .原创 2021-06-15 23:01:09 · 130 阅读 · 0 评论 -
【数据结构与算法面试题】二叉树镜像
题目来源“数据结构与算法面试题80道”。问题分析:实质上仍然是二叉树的遍历,上述已经介绍过二叉树的不同的遍历方法,当遍历到每一个节点的时候,交换其左右子树,依次下去,直到叶子节点。方法:1、递归的方法:void tree_swap(BSTreeNode *root){ BSTreeNode *p_tmp = root->m_pLeft; root->m_pLeft = root->m_pRight; root->m_pRight = p_tmp;.原创 2021-06-15 22:56:09 · 219 阅读 · 1 评论 -
【数据结构与算法面试题】数组查找
题目来源“数据结构与算法面试题80道”。问题分析:时间复杂度为O(n),即只能遍历一次数组,考虑到数组是排好序的,考虑从头部和从尾部同时向数组的中部遍历,假设i从头部遍历,j从尾部开始遍历:如果a[i] + a[j] == num,直接返回;如果a[i] + a[j] > num,应该减小其和的值,则减小j;如果a[i] + a[j] < num,应该增大其和的值,则增加i;方法:void get_sum(int *a, int length, int n){ if.原创 2021-06-15 22:55:14 · 136 阅读 · 0 评论 -
【数据结构与算法面试题】单向链表倒数第k个节点
题目来源“数据结构与算法面试题80道”。问题分析:遍历一遍链表的时间复杂度为O(n),但是链表节点的遍历只能按顺序遍历,问题中是需要取到倒数第k个,最直接的想法是遍历两遍链表,第1遍得到链表的长度,第2遍是取到倒数第k个;那么能否只遍历一遍就能取到倒数第k个节点,最关键的点是需要确定链表的长度,我们可以使用双指针的方法:第一个指针用于遍历整个链表,第二个链表用于遍历部分链表,第一个指针比第二个指针多走k步,当第一个指针遍历完链表,第二个指针所指的即为倒数第k个数,如下图所示:方法:ListNo.原创 2021-06-15 22:54:17 · 200 阅读 · 0 评论 -
【数据结构与算法面试题】求和
题目来源“数据结构与算法面试题80道”。问题分析:可以使用类的构造方法,在类的每次实例化对象时都会调用构造方法,那么只需要实例化n个对象,就会调用n次构造方法,这就模拟了循环的过程,此时,只需要有一个全局变量记录累加的值即可。方法:#include <stdio.h>class calnum{ public: calnum(){ n ++; sum += n; } ~calnum(){} int get_num(){ return sum.原创 2021-06-15 22:52:46 · 187 阅读 · 1 评论 -
【数据结构和算法面试题】连续最长数字串
题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:字符串的处理,判断每一位是不是数字,用到了函数isdigit方法:int continumax(char *outputstr, char * inputstr){ if (NULL == inputstr) return 0; char *p = inpu...原创 2018-04-07 12:08:45 · 1117 阅读 · 0 评论 -
挑战数据结构和算法面试题——最大差值
题目来自伯乐在线,欢迎有不同答案的同学来一起讨论。分析:基本方法是遍历数组,找到当前值前面所有数组元素的最小值。方法:int get_max_distance(int *a, const int n) { int max_distance = 0; // 纪录最大距离 if (n == 0) return max_distance; int min = ...原创 2018-02-28 23:32:10 · 846 阅读 · 2 评论 -
数据结构和算法——用动态规划求解最短路径问题
一、动态规划求解问题的思路 在《算法导论》上,动态规划的求解过程主要分为如下的四步:描述最优解的结构递归定义最优解的值按自底向上的方式计算最优解的值由计算出的结果构造一个最优解 在利用动态规划求解的过程中值得注意的就是是否包含最优子结构,简单来讲就是一个问题的最优解是不是包含着子问题的最优解。利用求解子问题的最优解最后得到整个问题的最优解,这是利用动态规划求解问题的基本前提。二、最短路...原创 2014-10-03 17:01:56 · 22415 阅读 · 9 评论 -
挑战数据结构和算法面试题——二叉搜索树的后序遍历
题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。分析:根据二叉查找树的定义,二叉查找树或者是一棵空二叉树,或者是具有一下特性的二叉树:若它的左子树不为空,则左子树上的所有结点的值均小于根节点的值;若它的右子树不为空,则右子树上的所有结点的值均小于根节点的值;它的左右子树又分别是二叉查找树。结合二叉树的后序遍历,则初始序列...原创 2018-04-09 15:23:31 · 1075 阅读 · 1 评论 -
挑战数据结构和算法——栈的push、pop序列
题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题考查栈的基本操作,栈是一种“先进后出”的数据结构。判断一个序列是否是栈的pop序列是一种常见的问题,可以通过模拟push和pop的过程,push和pop总是成对出现的,如:方法:#define push 1#define pop -1bool judge_pus...原创 2018-03-14 14:20:41 · 6010 阅读 · 0 评论 -
每周算法练习——大数的乘法问题
大数问题的思路是使用矩阵或者字符串来存储,今天我试着用Java实现了这样的功能,这段程序只是基本模拟大数乘法,当然实现的只是基本的原理。Java代码:package org.algorithm.nqueens;/** * 用于计算大数的乘法,有可能大数相乘后的结果已经超出了可以表示的范围 这里使用String表示一个大数,简单来说我们就去实现两个String的相乘 * * @a...原创 2014-10-16 20:49:42 · 1630 阅读 · 0 评论 -
每周算法练习——n皇后问题
一、八皇后问题的描述 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解。(摘自维基百科) 其实这里是作为我的一个算法...原创 2014-10-13 21:56:50 · 2960 阅读 · 0 评论 -
每周算法练习——最近对问题
一、最近对问题的解释 看到算法书上有最近对的问题,简单来讲最近对问题要求出一个包含个点的集合中距离最近的两个点。抽象出来就是求解任意两个点之间的距离,返回距离最小的点的坐标,以及最小距离。这里会使用到欧式距离的求法:以上是二维的情况,这其实和相似性的计算是类似的,所以便想去实现这样的一个问题。二、最近对问题的蛮力解法 蛮力法是最直接的方法,就是求解任意两个点之间的距离,返回坐标和最小的...原创 2014-10-07 13:08:28 · 1917 阅读 · 0 评论 -
算法类面试题解析——美团2016校招:棋子翻转
题目来自伯乐在线,欢迎有不同答案的同学来一起讨论。分析:本题主要是二维数组的操作,对指定的位置上的数字进行翻转,其具体过程如下所示:其基本的过程如下:遍历数组二,如上图中的红色位置: 找到其周围的四个位置,注意数组的上下界验证没有越界的条件下,对其进行修改方法:void do_reverse(int **a, int k, int i, int ...原创 2017-08-07 13:30:52 · 2718 阅读 · 0 评论 -
数据结构和算法——动态规划
一、动态规划的思想 动态规划(dynamic programming)是一种算法设计的思想,主要是将一个问题划分成几个更小的问题,并对这样更小的问题进行求解,最终得到整个问题的解。有人在想这样的方式和分治法的求解很像。动态规划:各个子问题不是独立的,他们包含了公共子问题分治法:一个大问题是被划分成一些独立的子问题,通过递归地求解子问题最终得到整个问题的解在动态规划法中,与其对交叠的子问题一次...原创 2014-10-02 16:08:17 · 3892 阅读 · 1 评论 -
数据结构和算法——kd树
一、K-近邻算法K-近邻算法是一种典型的无参监督学习算法,对于一个监督学习任务来说,其mm个训练样本为:{(X(1),y(1)),(X(2),y(2)),⋯,(X(m),y(m))}\left \{ \left ( X^{\left ( 1 \right )},y^{\left ( 1 \right )} \right ),\left ( X^{\left ( 2 \right )},y^{\lef原创 2017-02-02 11:31:02 · 14949 阅读 · 6 评论 -
数据结构和算法——二叉排序树
一、二叉排序树对于无序的序列“62,58,88,47,73,99,35,51,93,29,37,49,56,36,48,50”,是否存在一种高效的查找方案,使得能够快速判断在序列中是否存在指定的数值?二叉排序树是一种简单,高效的数据结构。 二叉排序树,又称为二叉查找树。二叉排序树或者是一棵空树,或者是具有以下性质的二叉树:若其左子树不为空,则左子树上的所有节点的值均小于它的根结点的值;若其右子树原创 2017-01-22 16:03:27 · 16600 阅读 · 1 评论 -
数据结构和算法——二叉树
二叉树是使用较多的一种树形结构,如比较经典的二叉排序树,Huffman编码等,都使用到了二叉树的结构,同时,在机器学习算法中,基于树的学习算法中也大量使用到二叉树的结构,因此,我们有必要对二叉树的结构有比较详细的了解和掌握。一、二叉树的基本概念1、二叉树的概念 二叉树(Binary Tree)是包含nn个节点的有限集合,该集合或者为空集(此时,二叉树称为空树),或者由一个根节点和两棵互不相交的、原创 2017-01-15 22:23:52 · 43430 阅读 · 7 评论 -
数据结构和算法——旋转打印链表
1、问题描述输入参数nnn为正整数,如输入n=5n=5n=5,则按行打印如下的数字:2、问题的理解这个问题是将数字1…n21…n21\dots n^2按照一圈一圈的方式存储好,再按照行的方式对其进行打印。3、解决的方法最简单的方法是利用数组:声明一个二维数组[n][n]按照一圈一圈的方式向数组中添加对应数字再按照一行一行的方式打印这个方法比较简单,就...原创 2016-03-19 17:09:04 · 1967 阅读 · 1 评论 -
LeetCode——Add Two Numbers
题目:You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a l...原创 2015-04-06 12:17:05 · 1278 阅读 · 0 评论 -
LeetCode——Longest Substring Without Repeating Characters
题目:Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. F...原创 2015-01-15 14:59:08 · 1356 阅读 · 0 评论 -
挑战数据结构和算法——整数的二进制表示中1的个数
题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题涉及到二进制的处理,在本题使用到&操作和>>操作。方法:int get_num(int n){ int num = 0; if (n < 0){ num += 1; n = n * (-1); ...原创 2018-03-14 14:18:54 · 630 阅读 · 0 评论 -
【数据结构和算法面试题】跳台阶问题
题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:假设f(n)f(n)f\left ( n \right )为跳台阶的总跳法,当n=1n=1n=1时,f(n)=1f(n)=1f\left ( n \right )=1;当n=2n=2n=2时,f(n)=2f(n)=2f\left ( n \right )=2;当n=3n=3n=3时,如果...原创 2018-03-14 14:15:49 · 782 阅读 · 0 评论 -
【数据结构与算法面试题】统计上排数在下排出现的次数
题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。分析:本题应该是一个确定的问题,即上排的是个数是题目中给定的十个数。其基本的解题过程为:[10,0,0,0,0,0,0,0,0,0][9,0,0,0,0,0,0,0,0,1][8,1,0,0,0,0,0,0,1,0][7,2,1,0,0,0,0,1,0,0][6,2,1,0,...原创 2018-03-19 20:14:59 · 653 阅读 · 0 评论 -
挑战数据结构和算法面试题——最大间隔
题目来自伯乐在线,欢迎有不同答案的同学来一起讨论。分析:本题首先需要理解清楚最大间隔的最小:最初的间隔为:[1,1,4,1],此时最大间隔为4删除2后的间隔为:[2,4,1],此时最大间隔为4删除3后的间隔为:[1,5,1],此时最大间隔为5删除7后的间隔为:[1,1,5],此时最大间隔为5在删除元素后的间隔为:[4,5,5],最小值为:4方法:int...原创 2018-03-15 20:45:26 · 964 阅读 · 0 评论 -
【数据结构和算法面试题】左旋转字符串
题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题是常见的旋转字符串的问题,解决的方法是两步旋转的方法:方法:void do_reverse(char *p_start, char *p_end){ if (NULL == p_start || NULL == p_end || p_start > p_...原创 2018-03-14 14:11:36 · 464 阅读 · 0 评论