数据结构与算法
MaxMaxXiong
这个作者很懒,什么都没留下…
展开
-
算法实现--二分查找-0~n-1中缺失的数字
/************************************************************************/ /* 剑指 Offer 53 - II. 0~n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 示例2: 输入: [0,1,2,3,4,5,6,7,9..原创 2021-06-13 17:06:39 · 341 阅读 · 0 评论 -
算法实现--二分查找-在排序数组中查找元素的第一个和最后一个位置
/************************************************************************/ /* 34. 在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1: 输入..原创 2021-06-13 15:52:24 · 234 阅读 · 0 评论 -
算法实现--二分查找-旋转数组的最小数字
/* 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 示例 2: 输入:[2,2,2,0,1] 输出:0 来源:力扣(LeetCode) 链接:ht...原创 2021-06-13 15:51:03 · 97 阅读 · 0 评论 -
算法实现-二叉树相关
#pragma once#include <stack>#include <queue>#include <vector>#include <iostream>using namespace std;namespace BinaryTree{ void PrintFunStr(string funStr) { printf...原创 2020-04-07 00:32:43 · 155 阅读 · 0 评论 -
算法实现-排序相关
#pragma once#include <vector>#include <string>#include <iostream>using namespace std;namespace Sort{ // 基本思想:通过一趟排序将数分割为左,右两部分,并选择出基数,使得左边的都得基数小,右边的都比基数大,并依此递归操作。 // 1. ...原创 2020-04-06 20:18:43 · 164 阅读 · 0 评论 -
算法实现--list相关
#pragma once#include <vector>#include <string>#include <iostream>using namespace std;namespace List{ struct ListNode { int val; ListNode* next; ListNode(int x) : val(...原创 2020-04-06 17:54:13 · 209 阅读 · 0 评论 -
算法实现--求和为s的连续正数序列.
求和为s的连续正数序列.如,输入9,输出序列:{2,3,4}、和{4,5}下面是暴力循环法:// 暴力法vector<vector<int>> FindContinuousSequence(int target) { int sum = 0; vector<vector<int>> result; for (int i = 1;...原创 2020-04-06 17:53:28 · 161 阅读 · 0 评论 -
算法实现--给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"w...原创 2020-04-06 17:57:30 · 3598 阅读 · 0 评论 -
C++ 与String与WString相互转换
#include <wchar.h>#include <windows.h>/** @fn std::wstring String2WString(const std::string& str_in)* @brief string转换为wstring* @param (IN) const std::string&* @return st...原创 2019-06-06 15:03:03 · 1210 阅读 · 0 评论 -
算法实现--字符串替换空格
/* 题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路: 问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换! 问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。 从前往后替换,后面的字符要不断...原创 2020-04-06 17:54:41 · 108 阅读 · 0 评论 -
算法实现--二维数组-查找数字
/* 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 利用二维数组由上到下,由左到右递增的规律, 那么选取右上角或者左下角的元素a[row][col]与target进行比较, 当target小于元素a[row][c...原创 2020-04-06 17:54:54 · 99 阅读 · 0 评论 -
算法实现--二分查找-数组中负数与正数
/* 一个数组中中间部分都是0,前半部分全是负数,后半部分都是正数,要求时间复杂度尽量低的情况下,查找最后一个负数和第一个正数。 题目中描述的数组,求解结果是与0比较的,可以看做是有序的,使用二分查找,时间复杂度可以达到log(n)*/#include <vector>#include <iostream>using namespace std;/...原创 2019-06-03 19:13:00 · 1507 阅读 · 0 评论 -
找出数组中每个元素右边第一个比它大的元素
题目:给定一个整型数组,数组元素随机无序的,要求打印出所有元素右边第一个大于该元素的值。要求时间复杂度O(n)。借助栈结构可以一次遍历完数组,得到结果。#define INVALID_MAX -1vector<int> findMax(vector<int> num){ if(num.size()==0) return num; ...原创 2019-05-05 15:45:37 · 2478 阅读 · 1 评论 -
算法实现--找出一个字符串中第一个无重复字符
下面代码中使用自定义的高精度计时器,统计两种方案消耗时间。/*编写一个高效率函数来找出一个字符串中第一个无重复字符.例如:”total”中的o,”teeter”中的r.要求算法效率优于O(n2).字符串中的字符均存在于ASCII表中。*/#include <iostream>#include "StopwatchTime.h" // 计时接口#define AS...原创 2020-04-06 17:57:15 · 243 阅读 · 0 评论 -
单例模式实现
实现线程安全的泛型单例模式#ifndef __SINGLETON_H__#define __SINGLETON_H__#include <mutex>#include <memory>template <class T>class CSingleton{public: static T& Instance();priva...原创 2019-05-06 23:10:38 · 423 阅读 · 0 评论 -
算法实现--判断两个字符串是否互为旋转词
/*旋转字符串判断:如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B,请返回一个bool值,代表他们是否互为旋转词。测试样例:"cdab","abcd"返回:true*...原创 2020-04-06 17:57:52 · 144 阅读 · 0 评论 -
算法实现--KMP算法-匹配字符串
/*有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?*//*** @brief 暴力匹配* @param[in] s 主串* @param[in] p 模式串* @note 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;如...原创 2019-06-06 15:39:29 · 264 阅读 · 0 评论