数据结构
gdut17
这个作者很懒,什么都没留下…
展开
-
数组的最小K个数字,按序输出
#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;int partion(vector<int>&v,int low,int high){ int key = v[low]; while(low < high){ while(low<high && v[hi原创 2020-08-30 20:48:52 · 152 阅读 · 0 评论 -
字符串最长公共前缀/后缀
preclass Solution {public: string longestCommonPrefix(vector<string>& strs) { int i,j; string r; if(strs.size() == 0){ return r; } string pre = strs[0]; for(i=1;i<strs.size();i+原创 2020-08-28 22:01:39 · 545 阅读 · 0 评论 -
数组第K大
和第K小刚好相反有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。测试样例:[1,3,5,2,2],5,3返回:2先排序+快排+二分第K大,则说明是第n-k+1小目的下标为n-K根据快排中轴下标,二分法调整int partion(vector<int> a,int low,int high){ int key = a[low]; while(low < h原创 2020-08-27 17:25:20 · 134 阅读 · 0 评论 -
数组第K小的元素
快排+二分int getpart(int a[],int low,int high){ if (low>high) { return -1; } int low_t = low; int high_t = high; int key = a[low]; while (low < high) { while(low < high && a[high] >= key) { high--; } if (low<high)原创 2020-08-21 11:14:20 · 164 阅读 · 0 评论 -
判断链表是不是回文
struct ListNode { int val; struct ListNode *next;};//判断是否链表回文//比如12321是回文,1221是回文//1231不是。12323不是bool isPalindrome(ListNode* pHead){ if (pHead == NULL || pHead->next==NULL) { //cout<<"if\n"; return true; } //计算链表长度 //将前半部分反转,然后双指针依原创 2020-08-07 17:21:45 · 128 阅读 · 0 评论 -
二进制1的个数,0的个数
求二进制1的个数,负数用补码//求二进制1的个数,负数用补码int f1(int n){ unsigned int m=0; for(;n;) { n &= (n-1); ++m; } return m;}int f1_2(int n){ unsigned int m=0; int c = 32; while(c--) { if (n & 0x00000001) { m += 1; } n>>=1; } ret原创 2020-08-03 18:17:04 · 247 阅读 · 0 评论 -
二分查找
1.普通查找int getPos(vector<int> A, int n, int val) { // write code here if(A.size()==0 || n<=0){ return -1; } int low,high,mid; low = 0; high = n-1; while(low<=high){原创 2020-08-01 11:58:25 · 116 阅读 · 0 评论 -
快速排序
快速排序快速排序1void swapa(int &a,int &b){ int t = a; a = b; b = t;}int par(int a[],int low,int high){ int key; key = a[low]; while (low < high) { while(low<high && a[high]>=key) { high--; } if (low < hi原创 2020-08-01 11:37:51 · 273 阅读 · 0 评论 -
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNode* pHead){ ListNode*head; head = pHead; ListNode *p,*q; p = pHea原创 2020-07-30 09:54:28 · 203 阅读 · 0 评论 -
下删除开始和结尾处的空格, 并将中间的多个连续的空格合并成一个。 例如:“ i am a little boy. “, 变成“i am a little boy“
/* 给定字符串(ASCII码0-255)数组, 请在不开辟额外空间的情况下删除开始和结尾处的空格, 并将中间的多个连续的空格合并成一个。 例如:" i am a little boy. ", 变成"i am a little boy",语言不限, 但不要用伪代码作答,函数输入输出请参考如下的函数原型: */void FormatString(char str[],int len){ int i,j,k; i=0; //去除前面的 while (str.原创 2020-07-29 22:22:43 · 241 阅读 · 0 评论 -
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n<=39
class Solution {public: int Fibonacci(int n) { if(n==0 || n == 1){ return n; } //int a[40]={0,1}; int i,j; int a,b,c; a = 0; b = 1; for(i=2;i<40;i++){ c = a+b;原创 2020-07-29 00:02:39 · 698 阅读 · 0 评论 -
反转链表
#include <iostream>using namespace std;struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};class Solution {public: ListNode* ReverseList(ListNode* pHead) { //不带头结点的链表 if (pHead == NULL || p原创 2020-07-28 10:16:06 · 111 阅读 · 0 评论 -
双向链表
/* *不带头的链表 **/#include <stdio.h>#include <stdlib.h>struct node{ int var; struct node* prev; struct node* next;};//头插法void Add(int v,struct node**head){ struct node*pn...原创 2019-12-29 19:54:56 · 135 阅读 · 0 评论 -
删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com...原创 2019-09-21 22:56:25 · 103 阅读 · 0 评论