
数据结构与算法
对常见数据结构和算法设计与分析的内容进行总结
十早韦up
人要有所执,方能有所成
展开
-
LeetCode: 23. Merge k Sorted Lists(合并K个排序链表)
原题链接算法我采用的是分治法,在原有的Merge Two Sorted Lists的基础上进行改进自底向上先进行两个链表的合并,进而四个链表的合并…如下图所示链表1链表11链表2链表3链表12链表4链表111链表5链表5链表5链表1111AC代码(c++)/** * Definition for singly-linked list. * struct ListNode { ...原创 2020-02-12 19:37:06 · 133 阅读 · 0 评论 -
LeetCode:27. Remove Element(移除元素)
算法题目要求原地修改,可以采用双指针法定义指针i遍历数组所有元素,定义指针j用来保留剩余元素线性时间AC代码(c++)class Solution {public: int removeElement(vector<int>& nums, int val) { int len=nums.size(); int result...原创 2020-02-12 14:53:47 · 137 阅读 · 0 评论 -
LeetCode:35. Search Insert Position
原题链接算法从左到右遍历有序序列,找到和目标值相等或比目标值大的元素下标代码(c++)class Solution {public: int searchInsert(vector<int>& nums, int target) { int len=nums.size(); for(int i=0;i<len;i++) ...原创 2020-02-09 21:50:47 · 107 阅读 · 0 评论 -
LeetCode:31. Next Permutation
原题链接算法找到字典序相邻更大的序列,从序列最右端向最左端数起,直到找到一个相对更小的数,如图所示,4就是我们要找的数在4的右侧找到比4大的最小的数,如图所示,5两个数交替,为了保证字典序相邻,交换之后,对5之后的序列进行从小到大的排序ACcode(c++):class Solution {public: void nextPermutation(vector<in...原创 2020-02-09 21:33:28 · 170 阅读 · 0 评论 -
LeetCode:29. Divide Two Integers
原题链接开始直接累加,超出时间限制,看了别人的题解改用二分法class Solution {public: int divide(int dividend, int divisor) { //排除一些特殊情况 if(divisor==0) return 0; if(divisor==1) ...原创 2020-02-08 11:40:27 · 161 阅读 · 0 评论 -
LeetCode:26. Remove Duplicates from Sorted Array
原题链接官方的双指针法,很巧妙class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size()==0) return 0; sort(nums.begin(),nums.end());//快速排序 ...原创 2020-02-08 10:49:31 · 125 阅读 · 0 评论 -
LeetCode:24.Swap Nodes in Pairs
原题链接递归法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: Li...原创 2020-02-07 14:57:56 · 113 阅读 · 0 评论 -
LeetCode:Generate Parentheses
原题链接回朔法:class Solution {public: vector<string> res; void backtrack(string ss,int s,int e,int maxn) { if(ss.size()==maxn) { res.push_back(ss); ...原创 2020-02-06 12:14:11 · 128 阅读 · 0 评论 -
LeetCode:Merge Two Sorted Lists
原题链接合并两个链表,相对比较简单/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {publi...原创 2020-02-06 11:00:11 · 125 阅读 · 0 评论 -
LeetCode:Valid Parentheses(栈,哈希表)
字符配对问题,栈结构的典型应用直接判断方法:class Solution {public: bool isValid(string s) { if(s.empty())//假定空字符串是有效的 return true; stack<int> va; int len=s.size(); ...原创 2020-02-06 10:33:53 · 175 阅读 · 0 评论 -
LeetCode:3Sum Closest
快排+双指针class Solution {public: int threeSumClosest(vector<int>& nums, int target) { int len = nums.size(); sort(nums.begin(),nums.end()); int res=1; int ...原创 2020-02-04 11:37:06 · 171 阅读 · 0 评论 -
输油管道问题(线性时间解决)
输油管道问题某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有 n口油井的油田。从每口油井都要有一条输油管道沿南北向最短路经与主管道相连。如果给定 n 口油井的地理位置,即它们的 x 坐标(东西向)和 y坐标(南北向),应如何确定主管道的最优位置,使得各油井到主管道之间的输油管道的长度总和最小?设计一个线性时间算法计算各油井到主管道之间的输油管道最小长度总和。思考:主输油管道...原创 2020-01-12 15:39:56 · 4488 阅读 · 0 评论 -
设计一个算法在 O(n)时间内,对 0 到 n^2-1 之间的 n 个整数进行排序
设计一个算法在 O(n)时间内,对 0 到 n^2-1 之间的 n 个整数进行排序。思考:基于关键字比较的排序时间下界为O(nlogn),因此考虑用基数排序。基数排序基本思想:这道题目我们可以将整数表示为n进制,也就是说我们需要n个桶。源代码(c++):#include <iostream>#include <stdio.h>#include <queu...原创 2020-01-12 15:39:34 · 1653 阅读 · 0 评论 -
二叉查找树查找
这段程序有问题,但不知道问题在哪?#include <iostream>#include <stdlib.h>using namespace std;typedef struct celltype { int data; struct celltype *lchild, *rchild;}BSTNode;typedef BSTNode *BST;BST...原创 2019-12-11 22:14:46 · 152 阅读 · 0 评论 -
基于快速排序划分的思想,设计一个在 n 个元素的表 a[1:n]中确定第 k(1≤ k≤n)小元素的算法,并分析其最好、最坏和平均时间复杂性。
可以通过改写快速排序算法解决一趟排序划分出基准位置pivotpivot == k - 1,则pivot 位置数据就是pivot > k - 1,则在左半继续寻找pivot < k - 1,则在右半继续寻找采用“三数取中”的方法选取划分标准。代码是拿之前快速排序实验程序改的。#include <iostream>#include <stdlib.h&...原创 2019-12-11 20:37:22 · 714 阅读 · 0 评论 -
二路归并的非递归(迭代)实现
#include <iostream>#include <stdlib.h>#include <time.h>using namespace std;int maxn;void Merge(int s,int m,int t,int A[],int B[]){ int i=s,j=m+1,k=s; while(i<=m&am...原创 2019-12-11 17:14:40 · 288 阅读 · 0 评论 -
二分法查找(递归实现,非递归实现)
递归实现:#include <iostream>using namespace std;//递归实现二分查找int Find(int A[],int a,int b,int key){ if(a>b) return 0; int mid = (a+b)/2; if(A[mid]==key) return mid...原创 2019-12-11 16:21:41 · 424 阅读 · 0 评论 -
计算机算法基础实验一:分治与排序
计算机算法基础实验一:分治与排序实验指导书要求如下:实验项目:排序方法的实验比较排序方法是数据处理的最基本和最重要的操作。其目的是将一组“无序” 的记录序列调整为“有序”的记录序列。实验题目:归并排序与快速排序算法的实现与实验比较实验内容:实现归并排序与快速排序算法,通过实验数据的设计,考察不同规模、不同分布(不同初始状态)的数据对排序算法运行时间影响的规律,验证理论分析结果的正确性。...原创 2019-11-25 22:47:08 · 673 阅读 · 0 评论