数据结构与算法
idreaming689
提高自己的认知
展开
-
算法与数据结构-链表LeetCode
链表操作1,链表逆序-a leetcode 206整个链表进行逆序#include<stdio.h>struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){}};class Solution{public: ListNode* reverseList(ListNode*head){ ListNode *new_head=NULL;//指向新链表的头节点的指针 while(原创 2021-07-19 10:33:26 · 121 阅读 · 3 评论 -
实现超大数的加法运算C++
实现超大数的加法运算。将字符串拆解为数字,与字符‘0’的偏移得出数字的真实大小。 每一位进行相加操作,注意进位操作。 多出的长度再进行相加。 不要忘了最后一个进位。#include<iostream>#include<string>#include<vector>std::vector<int> stringAdd(std::string strA, std::string strB){ std::vector<int>原创 2021-04-02 10:05:10 · 590 阅读 · 0 评论 -
字符串旋转
连续的字符串旋转注意strlen与sizeof的区别//字符串翻转int ReverseString(char* a){ int len = strlen(a); for (int i = 0, j = len - 1; i < j; i++, j--) { char c = a[i]; a[i] = a[j]; a[j] = c; } return 1;}int main(){ char arry[] = "asdfghj"; ReverseString原创 2021-04-01 15:02:13 · 63 阅读 · 0 评论 -
快速排序总结
步骤:1, 先从数列中取出一个数作为基准2, 分区过程,将比这个数大的数全放到他的右边,小于等于的全部放到他的左边3, 在对左右区间重复第二步,直到各区间只有一个数思想: 挖坑+填数+分治算法int partition_get(int*a, int left, int right){ int i = left; int j = right; int key = a[left]; while (i < j) { while (i<j&&a[j]&..原创 2021-04-01 14:44:09 · 75 阅读 · 0 评论 -
N的阶乘递归实现
#include <iostream>using namespace std;int GetNum(int n){ int sum = 1; if(1 == n) { return 1; } sum =n * GetNum(n - 1); return sum;}原创 2019-09-25 12:56:43 · 1261 阅读 · 0 评论 -
查找数组中第二大的数
快速找出一个数组中的最大数、第二大数。思路: 如果当 前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的值赋给 max。如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值,则要把当前元素的值赋给 secondMax。void GetSecondMaxNumber(int *arr , int n){ int ...转载 2019-09-25 12:48:26 · 3506 阅读 · 0 评论 -
快速排序总结C++实现
1 概念快速排序使用的是分治思想。分治法 分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在计算机科学中,分治法就是运用分治思想的一种很重要的算法。分治法是很多高效算法的基础,如快速排序,归并排序,傅立叶变换(快速傅立叶变换)等等...转载 2019-04-18 14:13:59 · 144 阅读 · 0 评论 -
链表合并
将两个有序链表合并题目:已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)。递归实现:1.函数返回条件是有一个链表结束,则返回另一个链表2.取两个指针data域较小的作为新的头结点,递归调用循环实现:1.重新申请一个头结点,使用指针p指向他,每新加一个结点,就将指针p后移一位,即指针p永远指向新链表的尾结点2....转载 2019-04-22 12:56:44 · 140 阅读 · 0 评论 -
归并排序
基本思想: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之合并相邻的子序列:#include <iostream>...转载 2019-04-22 12:40:32 · 95 阅读 · 0 评论 -
判断单向链表中是否有环C++实现
原文:https://blog.csdn.net/caoshangpa/article/details/80363335 判断链表是否有环的经典的方法是快慢指针的方法。 快指针pf每次移动两个节点,慢指针ps每次移动一个节点,如果指针可以追上慢指针,那就说明其中有一个环,反之没有。结论:链表存在环,则fast和slow两指针必然会在slo...转载 2019-04-17 15:50:30 · 2726 阅读 · 0 评论 -
二分查找算法C++实现
二分查找的应用场景:二分查找目的是在一堆数中找到指定的数。使用二分查找这些数据需要有的特征(面试容易问):存储在数组中。 有序的排列。如果是链表就无法使用二分查找。顺序数组是递增递减,是否有重复的数据没有关系。二分查找的实现“分治法”,分治法基本都可以用递归来实现的,二分查找法的递归实现如下:int SearchBin(int array[], int low, ...原创 2019-04-17 11:55:27 · 6680 阅读 · 0 评论