目录
冒泡排序
void bubblesort(int a[],length) { int temp=0; for(int i=0;i<length-1;i++) { for(int j=length-1;j>i;j--) { if(a[j]<a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } } }
快速排序
void quicksort(int a[],int low,int high) { int temp; int i=low; int j=high; if(low<high) { temp=a[low]; while(i!=j) { while(j>i&&a[j]>=temp) j--; if(i<j) { a[i]=a[j]; i++; } while(i<j&&a[i]<temp) i++; if(i<j) { a[j]=a[i]; j--; } } a[i]=temp; quicksort(a,low,j-1); quicksort(a,i+1,high); } }
反转单链表
typedef struct listnode { int val; struct listnode *next; }ListNode; void reverselist(ListNode *head) { ListNode *current=head; ListNode *prev=null; ListNode *temp; while(current) { temp=prev; prev=current; current=current->next; prev->next=temp; } }
大数相加
先反转两个字符串,使其个位对齐,再相加
string pluss(string str1,string str2) { reverse(str1.begin(),str1.end()); reverse(str2.begin(), str2.end()); int carry = 0; string sum; if (str1.size() < str2.size()) { string temp = str1; str1 = str2; str2 = temp; } int len = str1.size() - str2.size(); string s3(len, '0'); str2 = str2 + s3; for (int i = 0; i < str1.size(); i++) { int value = str1[i] + str2[i] - 2 * '0' + carry; carry = value / 10; value = value % 10; sum.push_back(value + '0'); } if (carry != 0) { sum.push_back(carry + '0'); } reverse(sum.begin(), sum.end()); return sum; }
最大公共字串
string maxsubstr(string s1, string s2) { if (s1.length()>s2.length()) swap(s1, s2);//s1用于保存较短的子串 int len1 = s1.length(), len2 = s2.length(); int maxLen = 0, start = 0; vector<vector<int> >dp(len1 + 1, vector<int>(len2 + 1, 0)); for (int i = 1; i <= len1; ++i) for (int j = 1; j <= len2; ++j) { if (s1[i - 1] == s2[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; if (dp[i][j]>maxLen) //此 if() 写在if (s1[i - 1] == s2[j - 1]) 里面,能保证是第一次出现的,并且保证取到最大长度 { maxLen = dp[i][j]; start = i - maxLen;//记录最长公共子串的起始位置,并且记录的只有第一次出现 maxLen 的位置。因为如果以后出现相等的最大的,不会进行交换 } } } cout << s1.substr(start, maxLen) << endl; return s1.substr(start, maxLen); }