数据结构/算法/刷题
happyGirl122
欢迎关注:happyGirl的异想世界。更多精彩等着你。每一个不曾起舞的日子,都是对生命的辜负。
展开
-
C++实现快速排序(原理分析+源代码)
快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1转载 2020-12-01 21:25:02 · 1106 阅读 · 1 评论 -
不同语言树结构的定义
C++struct TreeNode{TYPE element;//该节点的元素TreeNode *firstChild;//指向该节点的第一个孩子TreeNode *nextSibling;//指向该节点的兄弟节点};C++还有比较完整的树定义(代码参考https://www.jianshu.com/p/1cbd86da13bd)//Tree.h 文件#pragma once#include <list>#include <algorithm>usi原创 2020-11-11 11:45:55 · 468 阅读 · 0 评论 -
跳台阶(剑指offer08)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。class Solution {public: int jumpFloor(int number) { int result[2] = {0, 1}; if(number < 2) retur...原创 2019-07-09 22:10:05 · 140 阅读 · 0 评论 -
变态跳台阶(剑指offer09)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:1阶台阶 1种可能,2阶台阶 两种可能f(1)=1,f(2)=2 ;3阶台阶f(3)=f(2)+f(1)+1//可以在1阶起跳,也可以在2阶起跳,也可以直接跳f(n)=f(n-1)+f(n-2)+f(n-3)...+f(n-n)=f(0)+f(1)+f(2...原创 2019-07-09 22:19:50 · 131 阅读 · 0 评论 -
矩阵覆盖(剑指offer10)
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?class Solution {public: int rectCover(int number) { int result[3] = {0,1, 2}; if(number< 3) ...原创 2019-07-10 21:28:06 · 149 阅读 · 0 评论 -
C语言和C++的结构体
C语言:typedef struct TreeNode{int val;struct TreeNode *lchild,*rchild;}TreeNode,*Tree;C++:struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) ...原创 2019-07-06 16:58:49 · 237 阅读 · 0 评论 -
二维数组中的查找(剑指offer01)
class Solution {public: bool Find(int target, vector<vector<int> > array) { int rows = array.size(); int columns = array[0].size(); int i=0,j=columns-1; ...原创 2019-07-06 17:23:34 · 112 阅读 · 0 评论 -
替换空格(剑指offer02)
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length){ if(str == nullptr && length &...原创 2019-07-06 18:16:41 · 101 阅读 · 0 评论 -
从尾到头打印链表(剑指offer03)
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/c...原创 2019-07-06 18:35:56 · 106 阅读 · 0 评论 -
重建二叉树(剑指offer04)
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * struct TreeNode { * int val;...原创 2019-07-06 20:24:58 · 115 阅读 · 0 评论 -
用两个栈实现队列(剑指offer05)
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { //push就是在尾部加一个元素 stack1.push(node); } int pop() {//pop就是让队头出来 if(stack2.em...原创 2019-07-07 13:02:38 · 81 阅读 · 0 评论 -
斐波那契数列(剑指offer07)
斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39因为传统的递归方法太占内存,效率低,HR一般不喜欢,故:class Solution {public: int Fibonacci(int n) { int result[2] = {0, 1}; ...原创 2019-07-08 21:45:13 · 119 阅读 · 0 评论 -
Leetcode刷题笔记1:Two Sum(C语言)
/*** Note: The returned array must be malloced, assume caller calls free().*/int* twoSum(int* nums, int numsSize, int target){ int i,j,flag=0; int *s = (int*)malloc(2*sizeof(in...原创 2019-03-28 15:28:40 · 214 阅读 · 0 评论 -
Leetcode刷题笔记2:Add Two Numbers(C语言)
错误示范:开始的时候,我想的比较简单,就输入的时候直接倒转得到数n1,同理得n2,然后相加得n后,取余尾插法就逆转数字了,如下:/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct Li...原创 2019-04-03 11:17:58 · 324 阅读 · 0 评论 -
Leetcode刷题笔记6:ZigZag Conversion(C语言)
char* convert(char* s, int numRows) { char str[numRows+1][1000]; int i=0,j=0,n,p=0,flag=0;//p记录现在填充到s的第几个字符了 n=strlen(s); char *str2; str2=(char *)malloc((n+1)*sizeof(char)); ...原创 2019-04-12 17:31:00 · 211 阅读 · 0 评论 -
交换算法— 快速排序、冒泡法;选择法
快速排序:int Partition(SqList &L, int low, int high){ L.r[0]=L.r[low]; pivotkey = L.[low].key; while (low<high) { while (low<high&&L.r...原创 2019-03-19 19:43:02 · 270 阅读 · 2 评论 -
头插法、尾插法建立链表(C语言)
头插、尾插#include "stdio.h"#include "stdlib.h"typedef struct List { int data; //数据域 struct List *next; //指针域} List;void TailCreatList(List *L) //尾插法建立链表{ List *s, *r;//s用来指向新生成的节点。r始终指向L的终端节点。...原创 2019-06-20 17:28:18 · 2904 阅读 · 0 评论 -
旋转数组的最小数字(剑指offer06)
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。class Solution {public: int minNumberInRotateArr...原创 2019-07-07 22:16:10 · 107 阅读 · 0 评论