欢迎使用CSDN-markdown编辑器
来源:互联网 发布:阿里云管理终端怎么用 编辑:程序博客网 时间:2024/06/08 13:30
int maxSubArray(vector<int>& nums) { int max,sum=0,tmpmax = INT_MIN,start,estart,end; for(int i=0;i<nums.size();i++) { sum +=nums[i]; if(sum > tmpmax) { tmpmax = sum; start = estart; end = i; } if(sum<0) { sum=0; estart = i+1; } } return tmpmax;}int minDistance(string word1, string word2) { int l1 = word1.size(),l2=word2.size(); int *pre = new int[l2+1]; int *cur = new int[l2+1]; memset(pre,0,sizeof(int)*(l2+1)); memset(cur,0,sizeof(int)*(l2+1)); for(int j=1;j<=l2;j++) { cur[j] =j; } for(int i=1;i<=l1;i++) { memcpy(pre,cur,sizeof(int)*(l2+1)); cur[0] = i; for(int j=1;j<=l2;j++){ int tmp = min(cur[j-1]+1,pre[j]+1); cur[j] = min(tmp,pre[j-1]+(word1[i-1]==word2[j-1]?0:1)); } } return cur[l2];}int maxIncreasingSequence(vector<int> &vec) { int len = vec.size(); int max_len[len] = {1},pre_index[len] = {-1}; for(int i=1;i<len;++i){ int curr=vec[i]; for(int j=0;j<i;++j){ if(vec[j]<vec[i]){ int msl=max_len[j]+1; if(msl>max_len[i]){ max_len[i]=msl; pre_index[i]=j; } } } } int maxs=0,max_idx; for(int i=0;i<len;++i){ if(pre_index[i]>maxs){ maxs=max_len[i]; max_idx=i; } } stack<int> st; while(max_idx>=0){ st.push(vec[max_idx]); max_idx=pre_index[max_idx]; }}int longestCommonString(string &left,string & right){ int lenLeft=left.size(),lenRight=right.size(),k; int c[lenRight] = {0}; int start,end,len,i,j; end=len=0; for(i=0; i<lenLeft; i++) { for(j=lenRight-1; j>=0; j--) { if(left[i] == right[j]) { if(i==0||j==0) c[j]=1; else c[j]=c[j-1]+1; } else c[j] = 0; if(c[j] > len) { len=c[j]; end=j; } } } start=end-len+1; return len;}int longestCommonSequence(string &left,string &right) { int lenLeft=left.size(),lenRight=right.size(); int pre[lenRight+1] = {0}; int cur[lenRight+1] = {0}; for(int i=1;i<=lenLeft;i++) { memcpy(pre,cur,sizeof(int)*(lenRight+1)); for(int j=1;j<=lenRight;j++) { if(left[i-1] == right[j-1]) cur[j] = pre[j-1]+1; else cur[j] = max(pre[j],cur[j-1]); } } return cur[lenRight];}void prefix(const string &str,int *&pi) { int n = str.length(),k=0; pi = new int[n]; pi[0] =0; for(int i=1;i<n;i++) { while(k>0 && str[i] != str[k]) k = pi[k-1]; if(str[k] == str[i]) k++; pi[i] = k; }}int main() { string P = "ababaca"; string T = "bacbababacaababaca"; int *pi = NULL; prefix(P,pi); int m = P.length(),n = T.length(),k=0; for(int i=0;i<n;i++) { while(k>0 && P[k] != T[i]) k = pi[k-1]; if(P[k] == T[i]) k++; if (k == m) cout<<"Pattern occurs with shift: "<<i-m+1<<endl; } delete [] pi; return 0;}int lower_bound(int *array, int size, int key){ int first = 0, middle; int half, len; len = size; while(len > 0) { half = len >> 1; middle = first + half; if(array[middle] < key) { first = middle + 1; len = len-half-1; } else len = half; } return first;}int upper_bound(int *array, int size, int key){ int first = 0, len = size-1; int half, middle; while(len > 0){ half = len >> 1; middle = first + half; if(array[middle] > key) len = half; else{ first = middle + 1; len = len - half - 1; } } return first;} struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };int cmp(double a,double b) { return a>b;}int inf = 101;void dijkstra(int a[][inf],int dst[],int path[],int n) { bool *visted = new int[n]; memset(visted,0,sizeof(visited)); //init dst visited[0] = true; for(int i=1;i<n;i++){ int min=INT_MAX,idx; for(int j=0;j<n;j++) { if(!visited[j] && dst[j] <min) { min = dst[j]; idx=j; } } visited[idx] = true; for(int j=0;j<n;j++) { if(!visited[j] && dst[j]>dst[idx]+a[idx][j]) { dst[j] = dst[idx]+a[idx][j]; parh[j] = idx; } } }}bool bellman (int a[][inf],int dst[],int path[],int n) { for(int i=1;i<=n-1;i++){ for(auto edge:edgelist) { if(edge.v>edge.u+edge.weight) { edge.v = edge.u+edge.weight } } } bool flag = true; for(auto edge:edgelist) { if(edge.v>edge.u+edge.weight) { flag = false; break; } } return flag;}bool floyd(int a[][inf],int dst[],int path[],int n) { for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { for (int j=0;j<n;j++) { if(a[i][j] >a[i][k] +a[k][j]) { a[i][j] =a[i][k] +a[k][j]; path[i][j] =k; } } } }}void preorder(Tree *root) { stack<Tree*> s; while(!s.empty() || root!= NULL) { while(root) { Print(root); s.push(root); root = root->left; } if(!s.empty()) { root = s.top(); s.pop(); root = root->right; } }}void inorder(Tree* root) { stack<Tree*> s; while(!s.empty() || root ) { while(root) { s.push(root); root=root->left; } if(!s.empty()) { root = s.top(); s.pop(); Print(root); root = root->right; } }}void postorder(Tree *root) { Tree *prev=NULL; stack<Tree*> s; s.push(root); while(!s.empty()) { Tree* cur = s.top(); if(cur->left == NULL &&cur->right == NULL || prev&&(prev == cur->left||prev == cur->right)) { Print(root); s.pop(); prev = cur } else { if(cur->right) s.push(cur->right); if(cur->left) s.push(cur->left); } }}void inittree(Tree* &root,int* pre,int *in,int num) { int i=0; root->data = pre[0]; for(i=0;i<num;i++) { if(pre[0] == in[i]) break; } if(i!=0) { root->left = new Tree(); inittree(root->left,pre+1,in,i); } if(i!=num-1) { root->right = new Tree(); inittree(root->right,pre+i+1,in+i+1,num-1-i); }}void nextPermutation(vector<int>& nums) { int nlen = nums.size(); if(nlen == 0 || nlen == 1) return; int idx=-1,first_min; for(int i = nlen-1;i>=1;i--) { if(nums[i] > nums[i-1]) { idx = i-1; break; } } if(idx==-1) { for(int i=0,j=nlen-1;i<=j;i++,j--) { swap(nums[i],nums[j]); } } else { for(first_min=nlen-1;first_min>idx;first_min--) if(nums[first_min]>nums[idx]) break; swap(nums[idx],nums[first_min]); for(int i=idx+1,j=nlen-1;i<j;i++,j--) { swap(nums[i],nums[j]); } } return;}vector<vector<int>> res; vector<vector<int>> permute(vector<int>& nums) { dfs(nums,0,nums.size()-1); return res; } void dfs(vector<int> &nums,int begin,int end) { if(begin == end) { res.push_back(nums); return; } for(int i=begin;i<=end;i++){ swap(nums[i],nums[begin]); dfs(nums,begin+1,end); swap(nums[i],nums[begin]); } } vector<vector<int>> res; vector<vector<int>> permuteUnique(vector<int>& nums) { int n = nums.size(); if(!n) return res; dfs(nums,0,n-1); return res; } void dfs(vector<int> &nums, int begin,int end) { if(begin==end) { res.push_back(nums); return; } for(int i=begin;i<=end;i++) { if(!exist(nums,begin,i)) { swap(nums[begin],nums[i]); dfs(nums,begin+1,end); swap(nums[begin],nums[i]); } } } bool exist(vector<int> &nums,int begin,int end){ for(int i=begin;i<end;i++) { if(nums[i] == nums[end]) return true; } return false; }void insertsort(int a[],int len) { for(int i=1;i<len;i++) { int tmp = a[i],j=i; while(j>0 && a[j-1]>tmp) { a[j] = a[j-1]; j--; } a[j] = tmp; }}void selectsort(int *a,int len) { for(int i=0;i<len;i++) { int min = a[i],idx=i; for(int j=i+1;j<len;j++) { if(a[j] <min) { min=a[j]; idx=j; } } swap(a[i],a[idx]); }}void bubblesort(int *a,int len) { for(int i=0;i<len;i++) { for(int j=1;j<len-i;j++) { if(a[j-1] >a[j]) swap(a[j-1],a[j]); } }}void shellsort(int *a,int len) { for(int h=len/2;h>0;h/=2) { for(int i=h;i<len;i++) { int j=i,tmp=a[i]; while(j>=h && a[j-h] >tmp){ a[j] = a[j-h]; j-=h; } a[j]=tmp; } }}void merge(int *a,int lb,int rb,int re) { int b=lb,le = rb-1,s=0,len = re-lb+1; int *tmp = new int[len]; while(lb<=le && rb<=re) { if(a[lb]<a[rb]) { tmp[s++] = a[lb++]; } else tmp[s++] = a[rb++]; } while(lb<=le) tmp[s++] = a[lb++]; while(rb<=re) tmp[s++] = a[rb++]; for(int k=b,l=0;k<=re;) a[k++] = tmp[l++]; delete []tmp;}void mergesort(int *a,int s,int e) { int mid = (e+s)/2; if(s>=e) return; mergesort(a,s,mid); mergesort(a,mid+1,e); merge(a,s,mid+1,e);}void quicksort(int *a,int s,int e) { if(s>=e) return; int i=s-1,j=s,tmp = a[e]; for(;j<e;j++) { if(a[j]<=tmp) swap(a[++i],a[j]); } swap(a[++i],a[e]); quicksort(a,s,i-1); quicksort(a,i+1,e);}void percdown(int *a,int i, int n) { int child,tmp; for(tmp=a[i];i*2+1<n;i=child) { child =i*2+1; if(child<n-1&&a[child+1]>a[child]) child++; if(tmp<a[child]) a[i] = a[child]; else break; } a[i] =tmp;}void heapsort(int *a,int len) { for(int i=len/2;i>=0;i--) percdown(a,i,len); for(int i=len-1;i>=0;i--) { swap(a[0],a[i]); percdown(a,0,i); }}double myPow(double x, int n) { int flag = n>0?1:0; long m = abs((long)n); double res = 1,base =x; while(m>0) { if(m&1) res *= base; base *=base; m>>=1; } return flag?res:1/res;}//最小的k个数int random(int low, int high) { int size = high - low + 1; return low + rand() % size; } void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } int partition(int *a, int left, int right) { int key = a[left]; int i = left; int j; for(j = i + 1; j <= right; j++) { if(a[j] <= key) { if(i != j) { i++; swap(&a[i], &a[j]); } } } swap(&a[i], &a[left]); return i; } int random_partition(int *a, int left, int right) { int index = random(left, right); swap(&a[index], &a[left]); return partition(a, left, right); } int randomized_select(int *a, int left, int right, int k) { if(left < 0 || (right - left + 1) < k) return -1; int pos = random_partition(a, left, right); int m = pos - left + 1; if(k == m) { return pos; } else if(k < m) { return randomized_select(a, left, pos - 1, k); } else { return randomized_select(a, pos + 1, right, k - m); } } void main() { int a[] = {1, 11, 23, 5, 6, 7, 20, 13, 22, 9, 34, 18}; int len = sizeof(a) / sizeof(int); int k = 7; randomized_select(a, 0, len - 1, k); for(int i = 0; i < len; i++) { printf("%d ", a[i]); } printf("\n"); } //int myAtoi(string str) { int sign = -1; int idx = 0; while(str[idx] == ' ') idx++; if(str[idx] == '-') { sign = 1; idx += 1; } if(sign == -1 && str[idx] == '+') { sign = 0; idx += 1; } int res = 0; int res2 = 0; while(idx < str.length()) { char c = str[idx]; idx++; int tmp; if(c>='0' && c <='9') tmp = c-'0'; else break; res2 = res; res = res*10 + tmp; if (res2 != 0 && res/res2 <10) { return sign==1?INT_MIN:INT_MAX ; } } return sign==1?res*-1:res;}
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- MySQL 5.6安装
- Message from debugger: Terminated due to signal 15
- 笔记本添加固态硬盘记
- Reverse Linked List II
- 我突然之间找到了自我
- 欢迎使用CSDN-markdown编辑器
- Day20、冒泡、快速、选择、插入、二分查找
- 【最近相关】:2016-8-24
- 双击磁盘闪屏以及双击桌面程序闪屏打不开怎么办
- 【C++】STL常用容器总结之三:向量vector
- Hibernate 主键维护策略和hibernate 常见的映射类型
- Hash索引和BTREE索引
- x264源码分析与应用示例(二)——码率控制
- 在PHP中如何使用redis