算法程序设计
似水~年华
这个作者很懒,什么都没留下…
展开
-
LeetCode 回文子串
5. 最长回文子串题目描述:解法一(暴力求解):class Solution {public: string longestPalindrome(string s) { int n=s.size(); string res; for(int i=0;i<n;i++){ for(int j=i;...原创 2019-09-06 17:15:30 · 237 阅读 · 0 评论 -
LeetCode 456. 132模式
题目描述:解法一:class Solution {public: bool find132pattern(vector<int>& nums) { int n=nums.size(); if(n<3) return false; int i=0,j=0,k=0; while(i<...原创 2019-09-01 20:35:52 · 202 阅读 · 0 评论 -
LeetCode 455. 分发饼干
题目描述:解法:class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(),g.end()); sort(s.begin(),s.end()); int ...原创 2019-09-01 20:11:23 · 188 阅读 · 0 评论 -
LeetCode 454. 四数相加 II
题目描述:解法一(暴力法,显然超时):class Solution {public: int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) { int res=0; ...原创 2019-09-01 20:01:15 · 94 阅读 · 0 评论 -
LeetCode 453. 最小移动次数使数组元素相等
题目描述:解法一(暴力法):class Solution {public: int minMoves(vector<int>& nums) { int res=0; int mmax=0,mmin=0; while(1){ for(int i=0;i<nums.size();i...原创 2019-09-01 19:40:52 · 120 阅读 · 0 评论 -
LeetCode 452. 用最少数量的箭引爆气球
题目描述:解法一:class Solution {public: static bool comp(vector<int>& a, vector<int>& b){ return a[0]<b[0]; } int findMinArrowShots(vector<vector<int&...原创 2019-08-31 19:56:19 · 123 阅读 · 0 评论 -
LeetCode 451. 根据字符出现频率排序
题目描述:解法:class Solution {public: string frequencySort(string s) { unordered_map<char, int> ump; for (const auto& str : s) ump[str]++; multimap&...原创 2019-08-31 19:17:20 · 152 阅读 · 0 评论 -
LeetCode 464. 我能赢吗
题目描述:解法一(递归搜索)(超时):class Solution {public: bool canWin(const int& maxChoosableInteger, int desired, unordered_map<int, bool> record) { for (int i = 1; i <= maxChoosabl...原创 2019-08-31 19:02:03 · 262 阅读 · 0 评论 -
LeetCode 2. 两数相加
题目描述:解法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ...原创 2019-08-31 16:12:18 · 76 阅读 · 0 评论 -
LeetCode 739. 每日温度
题目描述:解法一(暴力):class Solution {public: vector<int> dailyTemperatures(vector<int>& T) { int n = T.size(); vector<int> res(n, 0); for (int i = 0; ...原创 2019-09-02 09:49:07 · 130 阅读 · 0 评论 -
LeetCode 下一个更大元素
496. 下一个更大元素 I题目描述:解法(单调栈+哈希表):class Solution {public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { int n=nums2.size(); ...原创 2019-09-02 11:00:18 · 139 阅读 · 0 评论 -
LeetCode 978. 最长湍流子数组
题目描述:解法一(递归):class Solution {public: int coinChange(vector<int>& coins, int amount) { if(amount==0) return 0; int res=INT_MAX; for(auto coin:coins){ ...原创 2019-09-02 15:45:34 · 123 阅读 · 0 评论 -
LeetCode 买卖股票的最佳时机
121. 买卖股票的最佳时机题目描述:解法一:class Solution {public: int maxProfit(vector<int>& prices) { int n=prices.size(); if(n<2) return 0; int minp=prices[0]; ...原创 2019-09-05 19:32:12 · 141 阅读 · 0 评论 -
LeetCode 峰值
162. 寻找峰值题目描述:解法一(迭代):class Solution {public: int findPeakElement(vector<int>& nums) { int left=0,right=nums.size()-1; while(left<right){ int mid...原创 2019-09-04 12:59:51 · 210 阅读 · 0 评论 -
LeetCode 1. 两数之和
题目描述:解法:class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> record; vector<int> res; for(...原创 2019-09-03 16:39:19 · 118 阅读 · 0 评论 -
LeetCode 4. 寻找两个有序数组的中位数
题目描述:解法:class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { if(nums1.size()>nums2.size()) return findMedianSorted...原创 2019-09-03 16:32:12 · 104 阅读 · 0 评论 -
LeetCode 11. 盛最多水的容器
题目描述:解法:class Solution {public: int maxArea(vector<int>& height) { int n=height.size(); int right=n-1,left=0; int res=INT_MIN; while(left<right...原创 2019-09-03 10:06:38 · 146 阅读 · 0 评论 -
LeetCode 312. 戳气球
题目描述:解法一:class Solution {public: int maxCoins(vector<int>& nums) { int n=nums.size(); vector<vector<int>> dp(n+2,vector<int>(n+2,0)); //dp[i]...原创 2019-09-03 09:09:48 · 117 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串
题目描述:解法:class Solution {public: int lengthOfLongestSubstring(string s) { int n = s.size(); if(n<2) return n; vector<int> dp(128, -1); ...原创 2019-09-02 18:22:36 · 103 阅读 · 0 评论 -
LeetCode 983. 最低票价
题目描述:解法:class Solution {public: int mincostTickets(vector<int>& days, vector<int>& costs) { int n=days.size(); vector<int> dp(n+1,0); /...原创 2019-09-02 17:03:32 · 234 阅读 · 0 评论 -
LeetCode 53. 最大子序和
题目描述:解法一(DP):class Solution {public: int maxSubArray(vector<int>& nums) { if(nums.size()==1) return nums[0]; int res=nums[0],temp=nums[0]; for(int i=1;i&...原创 2019-08-31 15:45:28 · 131 阅读 · 0 评论 -
LeetCode 147. 对链表进行插入排序
题目描述:解法一(头节点另处理):/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {...原创 2019-08-31 15:18:05 · 89 阅读 · 0 评论 -
LeetCode 143. 重排链表
题目描述:解法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ...原创 2019-08-31 14:38:11 · 102 阅读 · 0 评论 -
LeetCode 6. Z 字形变换
题目描述:解法:class Solution {public: string convert(string s, int numRows) { int n = s.size(); if (numRows >= n||numRows<2) return s; //特殊情况特殊处理 string res; ...原创 2019-08-30 12:59:59 · 88 阅读 · 0 评论 -
大数取余算法的证明及实现
大数取余算法当一个数很大时,大到long long int类型都存放不了的时候,我们该怎么办呢?首先我们举个简单的例子来了解该算法的思想:假设有一个数443443,我们要求443%3443%3,不妨拿起笔和纸和我一起演算一下,我们看到计算过程是:第一位数字4:4%3=14%3=1第二位数字4:(1×10+4)%3=2(1×10+4)%3=2第三位数字3:(2×10+3...转载 2019-08-05 15:44:39 · 425 阅读 · 0 评论 -
删除数组中重复整数
设计一个算法在一个包含有n个整数的数组a中,删除多余的重复整数。其思路是逐步扩大不重复区。算法开始假设a[0]为不重复区的唯一一个元素,用k指示,k永远指示不重复区的最后一个数据的索引。然后用i=1,2,....,n-1检测后面的每一个整数是否与不重复区中的整数有重复,若没有重复,将该整数放到不重复区的末尾,同时更新k(k+1,把该整数移动到k位置);若有重复则i+1继续检测下一个整数。...原创 2019-07-03 19:17:01 · 1156 阅读 · 0 评论 -
C++随机数(rand和srand)函数用法详解(三)
解决一个问题:从0....n-1中随机等概率的输出m个不重复的数。这里我们假设n远大于m1. 方法一最初的思想是每生成一个随机数,便于前面的所有随机数进行比较,如果有重复,则舍去不要,重新选取。但该方法十分费时,并且在数据量巨大的并且有一定限制的时候,会引发巨大问题。例如要生成10000个随机数,范围是0-9999,且不能重复,那么最后几个随机数有可能需要相当长的时间才能筛选出来。...原创 2019-07-03 10:01:42 · 392 阅读 · 0 评论 -
数据结构-马走日的解法
假设国际象棋棋盘有5*5共25个格子。设计一个程序,使棋子从初始位置(如图)开始跳马,需要将棋盘的格子全部都走一遍,每个格子只允许走一次。问:总共有多少解。(提示:回溯法)P.S国际象棋的棋子是在格子中间的。国际象棋中的“马走日”,如第一步为[1,1],第二步为[2,8]或[2,12],第三步可以是[3,5]或[3,21]等,以此类推。#include <iostream...原创 2019-07-02 14:13:29 · 711 阅读 · 0 评论 -
两人轮流投硬币概率问题和线段三分构成三角形概率问题
问:甲乙两人轮流投硬币,先投出正面的赢,如果甲先扔硬币,那么甲获胜的概率是多少?不妨把甲乙每都扔一次看作一轮第一轮,甲赢:1/2,乙赢:1/2*1/2=1/4第二轮,甲赢:1/2*1/2*1/2=1/8,乙赢:1/2*1/2*1/2*1/2=1/16第三轮,甲赢:1/16*1/2=1/32,乙赢:1/32*1/2=1/64.......其实我们不妨这样看:先只管甲赢,首先甲抛到正...原创 2019-07-02 11:32:22 · 1268 阅读 · 0 评论 -
给定n个数,要求比较次数1.5n同时找出最大值和最小值
写出一个算法,对给定的n个数的序列,返回序列中的最大和最小的数.设计出一个算法,只需要执行1.5n次比较就能找到序列中最大和最小的数吗?能否再少?分析:要求比较次数为1.5n,使用一般的逐个遍历每个元素然后判断其是否为最大最小值是需要2n次的比较的,所以这样的方法是行不通的。现在考虑采用,每次从数组中取出两个元素,判断其大小,然后再分别判断其是否是最大或最小值,这样一次处理两个元素,每一次...原创 2019-06-08 22:32:34 · 1151 阅读 · 0 评论 -
LeetCode 7. 整数反转
题目描述:解法:class Solution {public: int reverse(int x) { int res=0; int rem; //余数 while(x!=0){ rem=x%10; x/=10; if(res>INT...原创 2019-08-30 13:26:58 · 83 阅读 · 0 评论 -
LeetCode 8. 字符串转换整数 (atoi)
题目描述:解法一:class Solution {public: int myAtoi(string str) { int index=0; bool neg=0; long long res=0; while(str[index]==' ') index++; if(str[inde...原创 2019-08-30 14:16:29 · 77 阅读 · 0 评论 -
LeetCode 9. 回文数
题目描述:解法一(转换为字符串):class Solution {public: bool isPalindrome(int x) { string temp=to_string(x); return isPalindrome(temp); } bool isPalindrome(string& temp){ ...原创 2019-08-30 15:20:02 · 132 阅读 · 0 评论 -
LeetCode 92. 反转链表 II
题目描述:解法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ...原创 2019-08-31 12:53:45 · 104 阅读 · 0 评论 -
LeetCode 206. 反转链表
题目描述:解法一(迭代):/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {p...原创 2019-08-31 12:03:43 · 86 阅读 · 0 评论 -
LeetCode 205. 同构字符串
题目描述:解法(交叉映射):class Solution {public: bool isIsomorphic(string s, string t) { unordered_map<char,char> record1; unordered_map<char,char> record2; for(in...原创 2019-08-30 22:50:51 · 97 阅读 · 0 评论 -
LeetCode 204. 计数质数
题目描述:解法一(厄拉多塞筛法):class Solution {public: int countPrimes(int n) { vector<bool> dp(n,0); int res=0; for(int i=2;i<n;i++){ if(dp[i]==0){ ...原创 2019-08-30 22:29:07 · 107 阅读 · 0 评论 -
LeetCode 203. 移除链表元素
题目描述:解法一(自然想法):/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {...原创 2019-08-30 20:24:19 · 96 阅读 · 0 评论 -
LeetCode 232. 用栈实现队列
题目描述:解法一(自然解法使用两个栈 入队 -O(1), 出队 - O(n)):class MyQueue { stack<int> stk1; stack<int> stk2; int Front;public: /** Initialize your data structure here. */ MyQueue...原创 2019-08-30 19:13:40 · 108 阅读 · 0 评论 -
LeetCode 225. 用队列实现栈
题目描述:解法一(两个队列,压入 -O(1), 弹出 -O(n))class MyStack { queue<int> que1; queue<int> que2; int Top;public: /** Initialize your data structure here. */ MyStack() { ...原创 2019-08-30 16:46:57 · 98 阅读 · 0 评论