leetcode others...
来源:互联网 发布:淘宝网狗狗衣服 编辑:程序博客网 时间:2024/04/30 04:52
int maxProfit(vector<int> &prices) {//Best Time to Buy and Sell Stock if (prices.size() == 0) return 0; int low = prices[0]; int profit = 0; for (int i = 1; i < prices.size(); ++i) { low = min(prices[i], low); profit = max(profit, prices[i] - low); } return profit; }public int longestValidParentheses(String s) {//Longest Valid Parentheses )()()) int maxLen = 0, last = -1; Stack<Integer> lefts = new Stack<Integer>(); for (int i=0; i<s.length(); ++i) { if (s.charAt(i)=='(') { lefts.push(i); } else { if (lefts.isEmpty()) { // no matching left last = i; } else { // find a matching pair lefts.pop(); if (lefts.isEmpty()) { maxLen = Math.max(maxLen, i-last); } else { maxLen = Math.max(maxLen, i-lefts.peek()); } } } } return maxLen;}vector<int> twoSum(vector<int> &numbers, int target) {//two sum 4,4,5,3,2 target=8 vector<int> result;if(numbers.size()==0) return result;map<int,set<int>> numMap;for(int i=0;i<numbers.size();i++){numMap[numbers[i]].insert(i);}map<int,set<int>>::iterator it;set<int>::iterator setIt;for(int i=0;i<numbers.size();i++){it=numMap.find(target-numbers[i]);if(it!=numMap.end()){for(setIt=it->second.begin();setIt!=it->second.end();setIt++){if((*setIt)>i){result.push_back(i+1);//index+1 result.push_back(*setIt+1);//index+1return result;}}}}return result;}vector<vector<int> > threeSum(vector<int> &num) {//3 sum vector<vector<int>> result; int n=num.size(); if(n<=2) return result; sort(num.begin(),num.end()); vector<int> resultItem(3); for(int i=0;i<=n-3;i++) { if(i>0&&num[i]==num[i-1]) continue; int target=-num[i]; int j=i+1; int k=n-1; while(j<k) { if(num[j]+num[k]==target) { resultItem[0]=num[i]; resultItem[1]=num[j]; resultItem[2]=num[k]; result.push_back(resultItem); j++; k--; while(j<k&&num[j]==num[j-1]) j++; } else if(num[j]+num[k]>target) { k--; } else { j++; } } } return result; }void merge(int A[], int m, int B[], int n) {//Merge Sorted Array int i=m-1;int j=n-1;int k=m+n-1; while(i>=0&&j>=0) { A[k--]=A[i]>B[j]?A[i--]:B[j--]; } while(j>=0) { A[k--]=B[j--]; } return ; }int removeElement(int A[], int n, int elem) {//Remove Elementint len = 0;for (int i = 0; i < n; i++){ if (A[i] != elem)A[len++] = A[i];}return len;}//Merge Intervalsclass myComp { public: bool operator()(const Interval &i1, const Interval &i2) { return i1.start < i2.start; }};class Solution {public: vector<Interval> merge(vector<Interval> &intervals) { vector<Interval> result; int n=intervals.size(); if(n==0) return result; sort(intervals.begin(),intervals.end(),myComp()); result.push_back(intervals[0]); for(int i=1;i<n;i++) { if(intervals[i].start>result.back().end) { result.push_back(intervals[i]); } else { result.back().end=max(result.back().end,intervals[i].end); } } return result; }};//Insert Interval vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<Interval> result; if(intervals.size()==0) { result.push_back(newInterval); return result; } int i=0; while(i<intervals.size()&&intervals[i].end<newInterval.start) { result.push_back(intervals[i++]); } result.push_back(newInterval); while(i<intervals.size()) { if(intervals[i].start<=result.back().end) { result.back().start=min(result.back().start,intervals[i].start); result.back().end=max(result.back().end,intervals[i].end); i++; } else { result.push_back(intervals[i++]); } } return result;}//Merge Two Sorted ListsListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { // Start typing your C/C++ solution below // DO NOT write int main() function if(!l1) return l2; if(!l2) return l1; ListNode* head=NULL; if(l1->val>l2->val) { head=l1; l1=l1->next; } else { head=l2; l2=l2->next; } ListNode* p=head; while(l1&&l2) { if(l1->val>l2->val) { p->next=l1; l1=l1->next; } else { p->next=l2; l2=l2->next; } p=p->next; } while(l1) { p->next=l1; l1=l1->next; p=p->next; } while(l2) { p->next=l2; l2=l2->next; p=p->next; } return head;}//a recursive solution Merge Two Sorted ListsListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { // Start typing your C/C++ solution below // DO NOT write int main() functionif(!l1) return l2;if(!l2) return l1;ListNode* head=NULL;if(l1->val>l2->val){head=l1;head->next=mergeTwoLists(l1->next,l2);}else{head=l2;head->next=mergeTwoLists(l1,l2->next);}return head;}//Remove Nth Node From End of ListListNode *removeNthFromEnd(ListNode *head, int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(!head||n<=0) return head; int len=0; int first=head; int second=NULL; while(first) { len++; if(len==n+1) { second=head; } else if(len>n+1) { second=second->next; } first=first->next; } if(len==n) { ListNode* temp=head; head=head->next; free(temp); } else { ListNode* temp=second->next; second->next=temp->next; free(temp); } return head; }//Add Two Numbers (2 -> 4 -> 3) + (5 -> 6 -> 4) ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { // Start typing your C/C++ solution below // DO NOT write int main() function if(!l1) return l2; if(!l2) return l1; int carry=0; int num1=0; int num2=0; ListNode* head=NULL; ListNode* p=NULL; while(l1||l2||carry!=0) { num1=0; num2=0; if(l1) { num1=l1->val; l1=l1->next; } if(l2) { num2=l2->val; l2=l2->next; } int sum=num1+num2+carry; carry=sum/10; sum%=10; ListNode* node=new ListNode(sum); if(!head) { head=node; p=node; } else { p->next=node; p=p->next; } } return head; }//Swap Nodes in PairsListNode *swapPairs(ListNode *head) {if(!head||!head->next) return head;ListNode* second=head;ListNode* first=head->next;ListNode* next=first->next;first->next=second;second->next=swapPairs(next);return first;}//Partition List ListNode *partition(ListNode *head, int x) { // Start typing your C/C++ solution below // DO NOT write int main() function if(!head) return head; ListNode* p=head; ListNode* head1=NULL; ListNode* tail1=NULL; ListNode* head2=NULL; ListNode* tail2=NULL; while(p) { if(p->val<x) { if(!head1) { head1=p; tail1=p; } else { tail1->next=p; tail1=tail1->next; } } else { if(!head2) { head2=p; tail2=p; } else { tail2->next=p; tail2=tail2->next; } } p=p->next; } if(tail1) tail1->next=NULL;if(tail2) tail2->next=NULL; if(head1) { tail1->next=head2; return head1; } else { return head2; } }int lengthOfLastWord(const char *s) {//Length of Last Word // Start typing your C/C++ solution below // DO NOT write int main() function if(!s) return 0; int lastlen=0; int currentlen=0; while(*s) { if(*s==' ') { if(currentlen!=0) { lastlen=currentlen; } currentlen=0; } else { currentlen++; } s++; } if(currentlen!=0) { lastlen=currentlen; } return lastlen; }