欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 备赛蓝桥杯--算法题目(1)

备赛蓝桥杯--算法题目(1)

2024/11/30 12:49:10 来源:https://blog.csdn.net/2302_79606537/article/details/143927314  浏览:    关键词:备赛蓝桥杯--算法题目(1)
1. 链表求和

. - 力扣(LeetCode)

class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *head = nullptr, *tail = nullptr;int carry = 0;while (l1 || l2) {int n1 = l1 ? l1->val: 0;int n2 = l2 ? l2->val: 0;int sum = n1 + n2 + carry;if (!head) {head = tail = new ListNode(sum % 10);} else {tail->next = new ListNode(sum % 10);tail = tail->next;}carry = sum / 10;if (l1) {l1 = l1->next;}if (l2) {l2 = l2->next;}}if (carry > 0) {tail->next = new ListNode(carry);}return head;}
};
2. 分割链表 

. - 力扣(LeetCode)

class Solution {
public:ListNode* partition(ListNode* head, int x) {ListNode* shead=new ListNode;ListNode* srear=shead;ListNode* bhead=new ListNode;ListNode* brear=bhead;ListNode* tmp=head;while(tmp){if((tmp->val)>=x){if(bhead==nullptr){bhead=brear=tmp;}else{brear->next=tmp;brear=brear->next;}}else{if(shead==nullptr){shead=srear=tmp;}else{srear->next=tmp;srear=srear->next;}}tmp=tmp->next;}brear->next=nullptr;srear->next=bhead->next;return shead->next;}
};
3. 最小栈

. - 力扣(LeetCode)

class MinStack {
public:/** initialize your data structure here. */MinStack() {s1=new stack<int>;s2=new stack<int>;}void push(int x) {s1->push(x);if(s2->empty()){s2->push(x);}else{if(x<=s2->top()){s2->push(x);}}}void pop() {if(s1->top()==s2->top()){s2->pop();}s1->pop();}int top() {return s1->top();}int getMin() {return s2->top();}
private:stack<int>* s1;stack<int>* s2;
};
4. 二叉树的前序,中序,后序遍历

. - 力扣(LeetCode)

#include<stack>
class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {vector<int> tmp;if(root!=nullptr){TreeNode* head=root;stack<TreeNode*> s;s.push(head);while(!s.empty()){head=s.top();tmp.push_back(head->val);s.pop();if(head->right!=nullptr){s.push(head->right);}if(head->left!=nullptr){s.push(head->left);}}}return tmp;}
};

. - 力扣(LeetCode)

class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> tmp;stack<TreeNode*> s;TreeNode* head=root;while(!s.empty()||head!=nullptr){while(head!=nullptr){s.push(head);head=head->left;}head=s.top();tmp.push_back(head->val);s.pop();head=head->right;}return tmp;}
};

. - 力扣(LeetCode)

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int> tmp;stack<TreeNode*> s;TreeNode* head=root;TreeNode* ptr=root;while(!s.empty()||head!=nullptr){while(head!=nullptr){s.push(head);head=head->left;}head=s.top();s.pop();if(head->right==nullptr||head->right==ptr){tmp.push_back(head->val);ptr=head;head=nullptr;}else{s.push(head);head=head->right;}}return tmp;}
};
5. 设计循环队列

. - 力扣(LeetCode)

class MyCircularQueue {
private:int front;int rear;int capacity;vector<int> elements;public:MyCircularQueue(int k) {this->capacity = k + 1;this->elements = vector<int>(capacity);rear = front = 0;}bool enQueue(int value) {if (isFull()) {return false;}elements[rear] = value;rear = (rear + 1) % capacity;return true;}bool deQueue() {if (isEmpty()) {return false;}front = (front + 1) % capacity;return true;}int Front() {if (isEmpty()) {return -1;}return elements[front];}int Rear() {if (isEmpty()) {return -1;}return elements[(rear - 1 + capacity) % capacity];}bool isEmpty() {return rear == front;}bool isFull() {return ((rear + 1) % capacity) == front;}
};
6. 排序数组

. - 力扣(LeetCode)

static int first,last;
class Solution {vector<int> tmp;void mergeSort(vector<int>& nums, int l, int r) {if (l >= r) return;int mid = (l + r) >> 1;mergeSort(nums, l, mid);mergeSort(nums, mid + 1, r);int i = l, j = mid + 1;int cnt = 0;while (i <= mid && j <= r) {if (nums[i] <= nums[j]) {tmp[cnt++] = nums[i++];}else {tmp[cnt++] = nums[j++];}}while (i <= mid) {tmp[cnt++] = nums[i++];}while (j <= r) {tmp[cnt++] = nums[j++];}for (int i = 0; i < r - l + 1; ++i) {nums[i + l] = tmp[i];}}void randomized_quicksort(vector<int>& nums, int l, int r) {if (l < r) {int j = rand() % (r - l + 1) + l;first=l,last=r;int i=l,x=nums[j];while(i<=last){if(nums[i]==x){i++;}else if(nums[i]<x){swap(nums[first++],nums[i++]);}else{swap(nums[last--],nums[i]);}}int left=first,right=last;randomized_quicksort(nums, l, left - 1);randomized_quicksort(nums, right + 1, r);}}
public:vector<int> sortArray(vector<int>& nums) {srand((unsigned)time(NULL));tmp.resize((int)nums.size(), 0);//mergeSort(nums, 0, (int)nums.size() - 1);randomized_quicksort(nums,0,(int)nums.size() - 1);return nums;}
};
7. 求数组第k个最大元素

. - 力扣(LeetCode)

static int first,last;
class Solution {
public:int findKthLargest(vector<int>& nums, int k) {int m=nums.size()-k;srand((unsigned)time(NULL));return test(nums,m);}int test(vector<int>& nums,int i){int ans = 0;for (int l = 0, r =nums.size() - 1; l <= r;) {partition(nums, l, r, nums[l + rand()%(r-l+1)]);if (i < first) {r = first - 1;} else if (i > last) {l = last + 1;} else {ans = nums[i];break;}}return ans;}void partition(vector<int>& nums, int l, int r, int x) {first = l;last = r;int i = l;while (i <= last) {if (nums[i] == x) {i++;} else if (nums[i] < x) {swap(nums[first++],nums[i++]);} else {swap(nums[last--],nums[i]);}}}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com