
C++
Karate_Y
先努力让自己发光,对的人才能迎着光而来
展开
-
使用C++11 写一段死锁程序
#include <thread>#include <mutex>#include <unistd.h>#include <iostream>using namespace std;static int a = 0;static int b = 0;static mutex mtx_a;static mutex mtx_b;void thread_func(){ mtx_b.lock(); cout <&l.原创 2020-10-12 09:55:10 · 345 阅读 · 0 评论 -
简化路径
思路就是利用栈的思想,同时涉及到子串的分割,C++ 的string 不提供分割方法,因此利用python代码会更简洁和易于理解,class Solution: def simplifyPath(self, path: str) -> str: stack = [] path = path.split("/") for i in path: if i == '..': if stack原创 2020-10-10 21:18:48 · 255 阅读 · 0 评论 -
跳跃游戏1 and 跳跃游戏2
class Solution {public: // 贪心算法 // 怎么贪心 bool canJump(vector<int>& nums) { int maxPos = 0; for(int i = 0; i < nums.size(); i++){ if(i > maxPos){ return false; } .原创 2020-10-10 15:26:59 · 146 阅读 · 0 评论 -
leetcode--缺失的第一个正数(原地hash)
class Solution {public: int firstMissingPositive(vector<int>& nums) { int len = nums.size(); for(int i = 0; i < len; i++){ while(nums[i] > 0 && nums[i] <= len && nums[nums[i]-1] != nums[.原创 2020-10-10 13:56:15 · 114 阅读 · 0 评论 -
数组去重问题
关于数组去重的问题,首先要进行排序。 经典题目: 三数之和,,,,,,, 组合总数 ||原创 2020-10-10 13:33:48 · 129 阅读 · 0 评论 -
leetcode-- 外观数列(C++)
总的思路就是递归里写循环。主要这有一个递归的关系。class Solution {public: // 递归 string countAndSay(int n) { if(n == 1){ return "1"; } string previous = countAndSay(n-1); string result = ""; int count = 1; for(原创 2020-10-10 13:23:31 · 141 阅读 · 0 评论 -
二分查找--- 在排序数组中查找元素的第一个位置和最后一个位置。
class Solution {public: // 缩小搜索空间法 vector<int> searchRange(vector<int>& nums, int target) { vector<int> res(2, -1); if(nums.size() == 0){ return res; } int left = 0; int ri.原创 2020-10-10 10:46:46 · 275 阅读 · 0 评论 -
二分查找----搜索旋转排序数组(C++)
这道题的边界条件真是非常复杂,也不是复杂,就是如果不debug,很难写出全ac的程序。下面给出一版:其中也是打了很多补丁。#include <iostream>#include <vector>using namespace std;class Solution {public: int search(vector<int>& nums, int target) { int left = 0; int r原创 2020-10-10 10:32:25 · 287 阅读 · 0 评论 -
leetcode-删除排序数组中的重复项 1- 2(C++)
第一题 :class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size() == 0){ return 0; } // 覆盖法 int j = 0; for(int i = 0; i < nums.size(); i++){ if(nums[i.原创 2020-10-09 20:44:11 · 88 阅读 · 0 评论 -
leetcode -24 两两交换链表的结点(C++)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode* dummy = new.原创 2020-10-09 20:14:14 · 118 阅读 · 0 评论 -
std::greater<T> 与 std::less<T> 区别
首先,这两个是仿函数,是一个类重载了operator(), 定义在头文件<functional>中,用在 sort() 的第三个参数greater<int> 用在 sort(vec.begin(), vec.end(), greater<int>) , 说明是从大到小排序less<int>用在 sort(vec.begin(), vec.end(), greater<int>) , 说明是从小到大排序用在 priority...原创 2020-10-09 19:42:11 · 750 阅读 · 0 评论 -
最长公共子串问题
最长公共子串与最长公共子序列区别:最长公共子串要求在原字符串中是连续的,而子序列只需要保持相对顺序一致,并不要求连续。最长公共子串描述有两个字符串(可能包含空格),请找出其中最长的公共连续子串,输出其长度。例如:输入: abcde bcd输出: 3代码暴力法public int getLCS(String s, String t){ if(s == null || t == null){ return 0; } int l1 = s.length原创 2020-10-09 14:00:05 · 379 阅读 · 0 评论 -
C++ 虚函数与继承的一些问题
#include <stdio.h>class B {public: int B1; virtual void fun1() { B1++; printf("in B fun1 B1 %p\n", this); } B() { B1 = 0; this->fun1(); }// B(const B& b1) {}};class C : public B {.原创 2020-10-03 16:22:33 · 122 阅读 · 0 评论 -
leetcode--下一个排列(C++)
#include <vector>#include <iostream>using namespace std;class Solution {public: void nextPermutation(vector<int>& nums) { int i = nums.size() - 2; while(i >= 0 && nums[i+1] <= nums[i]){ .原创 2020-09-26 17:27:31 · 114 阅读 · 0 评论 -
leetcode--删除有序链表中的重复元素2(C++)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: // 今天手撕一下这道题目 // 只要有重复, 我们就一个不留,全删了。 // 怎么做呢? ListNode*.原创 2020-09-26 14:43:36 · 234 阅读 · 0 评论 -
leetcode---括号生成(C++)
括号生成,相当于每个位置都有'(', ')'两种选择。然后是递归条件,我们用两个变量,left, right分别表示'(' , ')'已经使用的个数。如果right > left , 就说明当前使用right 多于left,这种情况是可以进行剪枝的。当left < 0 或right < 0 时,也要return, 当left和right都等于0时,这时结果保存,return.代码如下:class Solution {public: // 什么是有效的 // 回溯原创 2020-09-25 08:39:36 · 320 阅读 · 0 评论 -
leetcode--盛水最多的容器(C++)
class Solution {public: int maxArea(vector<int>& height) { // 双指针 int max_area = 0; int left = 0; int right = height.size() - 1; while(left < right){ int tmp = min(height[left], height[.原创 2020-09-23 19:56:36 · 175 阅读 · 0 评论 -
leetcode--整数反转(C++)
class Solution {public: int reverse(int x) { // 反转结果 int rev = 0; while(x != 0){ // 取余 int pop = x % 10; x /= 10; // 防止溢出 if( rev > INT_MAX / 10 || (rev =.原创 2020-09-23 19:45:54 · 84 阅读 · 0 评论 -
leetcode--- Z型变换(C++)
class Solution {public: string convert(string s, int numRows) { if(numRows < 2){ return s; } vector<string> strs(numRows); int flag = -1; int start = 0; for(int i = 0; i < s.leng.原创 2020-09-23 19:39:15 · 108 阅读 · 0 评论 -
leetcode-- 最长回文子串(C++)
class Solution {public: // 做一下这个题目 // 最长回文子串 // 直观思路: DP // 状态转移方程是啥? // dp[i][j] 表示 s[i:j]的这个子串是否回文串 // 我们只能保证它是回文的时候记录它的长度 string longestPalindrome(string s) { if(s.length() == 0){ return s; } .原创 2020-09-23 19:13:07 · 131 阅读 · 0 评论 -
leetcode--三数之和(C++)
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { // 第一个,第二个,第三个都不能重复 // 排序加双指针 vector<vector<int>> res; sort(nums.begin(), nums.end()); // 固定首元素 .原创 2020-09-23 18:41:02 · 181 阅读 · 0 评论 -
leetcode--- 无重复字符的最长子串(C++)
滑动窗口法class Solution {public: int lengthOfLongestSubstring(string s) { int left = 0; int right = 0; int maxlen = 0; set<char> window; while(right < s.size()){ while(window.find(s[right])原创 2020-09-23 13:48:21 · 95 阅读 · 0 评论 -
leetcode--两数相加(C++)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListN.原创 2020-09-23 13:20:40 · 102 阅读 · 0 评论 -
leetcode- - 两数之和(C++)
一遍hashmap代码:class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { // 一次hashmap map<int, int> m; for(int i = 0; i < nums.size(); i++){ if(m.find(target - nums[i]) !原创 2020-09-23 13:11:01 · 97 阅读 · 0 评论 -
全排列(C++)版 经典回溯模板
#include <vector>#include <iostream>using namespace std;static vector<vector<int>> res;void dfs(vector<int>& choice, vector<int> path){ if(choice.empty()){ res.push_back(path); return; }.原创 2020-09-23 10:15:53 · 483 阅读 · 0 评论 -
链表中环的问题终极版
判断链表中是否有环如果有环,找出环的入口计算环的长度计算链表的长度判断两个无环链表是否相交求相交的第一个节点原创 2020-09-21 16:23:55 · 127 阅读 · 0 评论 -
C++ new关键字抛出bad_alloc
C++ newC++ new 关键字底层调用了malloc来分配内存,但是会出现申请内存失败的情况。当new 申请内存失败时,会抛出bad_alloc异常,那么针对这种情况,我们有两种处理方式。方法1. try-catch 捕获异常当new获取内存失败时,抛出bad_alloc异常,我们可以捕获异常,但是这种方法非常繁琐,我们在程序中可能会大量用到new,我们要加很多try-catch块。对程序员不友好。#include <iostream>#include <new>u原创 2020-09-19 15:47:02 · 1988 阅读 · 0 评论 -
使用C++实现生产者消费者模式
使用互斥锁加条件变量核心要素: 一个互斥锁,两个条件变量 实现 有界阻塞队列#include <iostream>#include <queue>#include <stdlib.h>#include <pthread.h>#include <unistd.h>#define NUM 8class BlockQueue{private: std::queue<int> q; int cap;原创 2020-09-14 20:25:25 · 548 阅读 · 3 评论 -
编译opencv 的cpp程序
g++ main.cpp `pkg-config --libs --cflags opencv` -std=c++11 -o main原创 2020-07-27 15:57:07 · 323 阅读 · 0 评论 -
C++ 实现线程安全的单例模式
#include <iostream>class Singleton{ public: ~Singleton()=default; Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete; // 局部静态变量 static Singleton& getInstance(){ static Singleton instance;.原创 2020-06-30 08:17:42 · 151 阅读 · 0 评论 -
二叉树的后序遍历(迭代版本)
二叉树的后序遍历相比较前序和中序复杂一些。我们需要一个标记来记忆我们此时节点上一个节点。具体的java代码如下:// 二叉树的后序遍历public static void postOrderTraverWithStack(TreeNode node){ Stack<TreeNode> stack = new Stack<>(); TreeN...原创 2020-02-24 09:19:22 · 1150 阅读 · 0 评论 -
C++ 实现小顶堆
#include <algorithm>#include <cassert>using namespace std;template<typename Item>class MinHeap{private: Item *data; int count; int capacity; void shiftUp(i...原创 2019-10-23 21:24:40 · 1085 阅读 · 0 评论 -
C ++ 实现大顶堆
堆这种数据结构在面试中还是经常容易被问到的,除了基本的堆排序,还有就是经典的TopK问题都可以用堆来实现。堆其实是一种完全二叉树。它可以方便的用数组来存储,而不是采用二叉链表存储。所以说堆底层维护的还是一个数组,只不过对其进行了封装。下面我们就来实现一个大顶堆吧。#include <iostream>#include <algorithm>using namesp...原创 2019-10-23 21:19:33 · 1217 阅读 · 0 评论