数据结构及算法
Wu_uuuu
这个作者很懒,什么都没留下…
展开
-
Leetcode-27. Remove Element
题目大意Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn't matter what you leave beyond the new length.要求从数组中原创 2017-03-01 21:52:22 · 203 阅读 · 0 评论 -
Leetcode-28. Implement strStr()
题目Implement strStr().Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.找出needle在haystack第一次出现的位置,如果没出现则返回-1思路直接使用C++ string提供的find(),该函数如果找到字串则返回第原创 2017-03-01 22:04:09 · 183 阅读 · 0 评论 -
Leetcode-14. Longest Common Prefix
题目求一组字符串的最长公共前缀思路先将所有的字符串排序,然后比较第一个和最后一个字符串的每一个字符,直到找到最长公共前缀。代码class Solution {public: string longestCommonPrefix(vector<string>& strs) { if(0 == strs.size()) return "";原创 2017-03-08 10:22:22 · 186 阅读 · 0 评论 -
Leetcode-17. Letter Combinations of a Phone Number
题目经典的backtracking(回溯算法)的题目。当一个题目,存在各种满足条件的组合,并且需要把它们全部列出来时,就可以考虑backtracking了。当然,backtracking在一定程度上属于穷举,所以当数据特别大的时候,不合适。而对于那些题目,可能就需要通过动态规划来完成。思路假设输入的是"23",2对应的是"abc",3对应的是"edf",那么我们在递归时,先确定2对应的其中一个字母原创 2017-03-08 10:27:01 · 318 阅读 · 0 评论 -
Leetcode-8. String to Integer (atoi)
题目实现atoi函数 首先从字符串开始去除空白字符,直到第一个非空白字符。 判断第一个字符是加号或者减号。 字符串中可能包含非数字字符,遇到时应返回之前计算出的整数值。 如果不符合整数转换,返回0代码class Solution {public: int myAtoi(string str) { if(str.empty()) return原创 2017-03-04 21:58:47 · 254 阅读 · 0 评论 -
Leetcode-26. Remove Duplicates from Sorted Array
题目删除数组中的重复的元素,不能使用额外的存储空间思路在原数组一次遍历,比较前一个当前元素和前一个元素是否相同即可代码class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size() <= 1) return nums.size(); in原创 2017-03-05 15:53:52 · 185 阅读 · 0 评论 -
Leetcode-15. 3Sum
题目Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain du原创 2017-03-18 20:36:24 · 196 阅读 · 0 评论 -
Leetcode-18. 4Sum
题目:Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target. Note: The solution s原创 2017-03-18 21:22:43 · 189 阅读 · 0 评论 -
Leetcode-38. Count and Say
题目 本题是将数字从1开始,将当前数字转化为口语对应的数字。比如1口语是1个1,记作11;11读作2个1,记作21;21读作1个2,1个1,记作1211……'1'是第一个数字,根据输入的数字n,计算第n个这样的数字。说起来比较拗口,对照着例子可以感受一下……思路 从第二个数开始求每个数的字符串,直到求到第n个数代码class Solution {public: string coun原创 2017-03-05 18:25:34 · 231 阅读 · 0 评论 -
Leetcode-90. Subsets II
题目Given a collection of integers that might contain duplicates, nums, return all possible subsets. Note: The solution set must not contain duplicate subsets.For example, If nums = [1,2,2], a solution原创 2017-03-27 17:17:54 · 235 阅读 · 0 评论 -
Leetcode-78. Subsets
题目Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not contain duplicate subsets. For example, If nums = [1,2,3], a solution is: 求一个集合的子集思路回溯法求子集代码cl原创 2017-03-26 10:04:08 · 318 阅读 · 0 评论 -
Leetcode-45. Jump Game II
题目Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. Your goal is t原创 2017-03-28 16:51:56 · 261 阅读 · 0 评论 -
Leetcode-20. Valid Parentheses
题目Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.The brackets must close in the correct order, “()” and “()[]{}” are all valid but原创 2017-03-28 17:10:56 · 235 阅读 · 0 评论 -
数组中出现次数超过一半的数
用一种简单的办法来解决 定义两个变量,从第一个数开始找,并记录第一个数为result为需要找的数,它出现的次数初始化为:times=1 以后只要找到和result相等的数rimes++,否则times– 当times等于0的时候,改变result等于当前指向的数,继续找#include<iostream>using namespace std;int main() { int n;原创 2017-03-20 20:24:40 · 238 阅读 · 0 评论 -
Leetcode-88. Merge Sorted Array
题目Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. 合并两个有序的数组nums1和nums2到nums1中。代码class Solution {public: void merge(vector<int>& nums1, int m, vector<i原创 2017-03-20 20:09:19 · 195 阅读 · 0 评论 -
解决2sum问题
1、题目给定一个数组和目标值,求数组中所有相加结果等于目标值的数字组合2、思路首先对数组元素排序,如果希望结果中的解没有重复的,则去除数组中重复的元素,设置两个指针从数组的两端向中间遍历,如果相加结果等于目标值,则指针所指位置即为解,如果结果大于目标值,则右指针左移,否则左指针右移;3、代码(c++)#include<iostream>#include<algorithm>#include<ve原创 2017-03-18 11:26:57 · 357 阅读 · 0 评论 -
Leetcode-34. Search for a Range
题目Given an array of integers sorted in ascending order, find the starting and ending position of a given target value. Your algorithm’s runtime complexity must be in the order of O(log n). If the tar原创 2017-03-18 10:55:44 · 508 阅读 · 0 评论 -
Leetcode-35. Search Insert Position
题目:Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array.原创 2017-03-18 09:13:34 · 273 阅读 · 0 评论 -
CCF-权限查询
问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个模块的操作权限。 本题中的授权机制是这样设计的:每位用户具有若干角色,每种角色具有若干权限。例如,用户 david 具有 manager 角色,manager 角色有 crm:2 权限,则用户 david 具有 crm:2 权限,也就是 crm 类权限的第 2 等级的权限。原创 2017-03-17 16:30:50 · 960 阅读 · 0 评论 -
CCF-炉石传说
《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游戏的简化规则如下:* 玩家会控制一些角色,每个角色有自己的生命值和攻击力。当生命值小于等于 0 时,该角色死亡。角色分为英雄和随从。 * 玩家各控制一个英雄,游戏开始时,英雄的生命值为原创 2017-03-17 16:27:23 · 650 阅读 · 0 评论 -
UVA12108--Extraordinarily Tired Students
题意: 课堂上有n个学生(n<=10)。每个学生都有一个“清醒-睡眠”周期。其中第i个学生醒 ai 分钟后睡bi 分钟,然后重复(1<=ai,bi<=5),初始时第i个学生处在他的周期的第 ci 分钟。每个学生在临睡前会察看全班睡觉人数是否严格大于清醒人数,只有这个条件满足时才睡觉,否则就坚持听课 ai分钟后再次检查这个条件。问经过多长时间后全班都清醒。思路: 遍历每个学生,修改状态,如果都醒着原创 2016-10-13 21:10:34 · 326 阅读 · 0 评论 -
UVA815--Flooded
题意: 有一个n×m的网格,每个格子是边长10米的正方形,网格四周是无限大的墙壁。输入每个格子的海拔高度,以及网格内雨水的总体积。输出水位的海拔高度以及有多少百分比的区域有水(即高度严格小于水平面)。思路: 对格子高度排序,遍历格子,当当前格子下洪水体积大于总体积时,停止遍历。记录此时格子的位置n。覆盖面积即为 n与总格子数的比值,水位高度为总体积减去前n-1个格子装的体积再除以面积。代码:#i原创 2016-10-13 21:06:19 · 292 阅读 · 0 评论 -
UVA12504--Updating a Dictionary
题意: 比较两个字典 按字典序输出所有添加 删除 修改的项 如果没有任何更新 输出 No changes思路: 两个采用map存储两个字典。如果相等,输出No changes,否则,从两个map头开始同时遍历: 键相同时:值相同则同时删除,否则将键加到辅助vector中 不同时,字典序小的迭代器后移,大的不变 第一个map中即为删除的键 第二个map中即为添加的键 vecto原创 2016-10-13 20:52:28 · 323 阅读 · 0 评论 -
UVA12333--Revenge of Fibonacci
题意: 给你一个数字串,判断他是哪一个Fib数的前缀,有多种答案输出最小的,不存在输出-1。思路: 大数加法计算斐波那契数,字典树搜索 计算过程中进行字典树的创建,计算时,当斐波那契数大于50位时,只计算高50位即可。代码:#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#define ma原创 2016-10-13 20:33:07 · 433 阅读 · 0 评论 -
UVA10763--ForeignExchange
题意: 有一个非营利性的国际性机构执行一项国际交换学生计划。这几年来执行得相当好,有越来越多的学生想要参与这项计划,所以现在请你来帮忙这个机构。每个提出交换学生申请的人有2项资料:他来自哪一国,他想要交换到哪一国。这个计划只有在每个学生都可以找到一个交换对象的时候才算成功。换句话说,假如有一个学生想要从A国到B国,那么一定要有另一个学生从B国到A国。如果只有50个学生提出申请,要判断这计画是否可行原创 2016-10-13 20:25:16 · 401 阅读 · 0 评论 -
UVA1597--Bug Hunt
题目: 输入并模拟一段程序,输出第一个bug所在的行。每行程序有两种可能: 数组定义:格式为arr[size],例如a[10]; 赋值语句:格式为arr[index]=value,例如a[0]=3或者a[a[0]]=3 赋值语句可能会出现两种bug:下标index越界,使用未初始化变量。 思路: 定义数组类A原创 2016-10-13 20:20:09 · 409 阅读 · 0 评论 -
UVA136--Ugly Numbers
题意: 求由1、2、3和5相乘组成的数字的第1500个。思路: 采用优先队列,求得的数插入到优先队列中,注意插入之前先判断是否已经存在,可用set判断。代码:#include<stdio.h>#include<queue>#include<set>#include<vector>using namespace std;typedef long long LL;const int coe原创 2016-10-13 20:57:19 · 243 阅读 · 0 评论 -
UVA673--Parentheses Balance
题意: 输入一个包含()和[]的括号序列,判断是否合法: 空串合法; 如果A、B都合法,则AB合法 如果A合法,则(A)和[A]合法思路: 借助栈,左括号入栈,右括号如果匹配,栈顶出栈,继续,否则不合法。注意输入空行也合法。代码:#include<iostream>#include<string>#include<stdio.h>#include<stack>using names原创 2016-10-13 21:17:33 · 223 阅读 · 0 评论 -
C++实现中缀表达式转后缀表达式并求值
中缀表达式(中缀记法)中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。例如:(3 + 4) × 5 - 6 就是中缀表原创 2016-08-03 17:27:16 · 4598 阅读 · 1 评论 -
Leetcode-39. Combination Sum
题目Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.The same repeated number may be chosen from原创 2017-03-28 19:47:58 · 205 阅读 · 0 评论 -
Leetcode-40. Combination Sum II
题目Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.Each number in C may only be used once in the combination.原创 2017-03-28 20:25:16 · 231 阅读 · 0 评论 -
Leetcode-49. Group Anagrams
题目Given an array of strings, group anagrams together.For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”], Return:[ [“ate”, “eat”,”tea”], [“nat”,”tan”], [“bat”] ] Note: All input原创 2017-03-28 20:51:39 · 246 阅读 · 0 评论 -
Leetcode-48. Rotate Image
题目You are given an n x n 2D matrix representing an image.Rotate the image by 90 degrees (clockwise).Follow up: Could you do this in-place? 不借助辅助空间顺时针旋转二维数组90度思路先沿副对角线翻转,再沿横中轴线翻转代码class Solution {pub原创 2017-03-28 21:39:58 · 229 阅读 · 0 评论 -
Leetcode-62. Unique Paths
题目A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).The robot can only move either down or right at any point in time. The robot is trying to reach the bot原创 2017-03-28 22:08:16 · 213 阅读 · 0 评论 -
求整数的二进制形式中包含1的个数
1、题目输入一个整数,求该整数的二进制表示中1的个数,如输入9,二进制形式为1001,则1的个数为2。2、思路实现方式有多种,其中,采用位运算的方式效率较高,下面介绍3种位运算方式。3、代码3.1 将输入的数不断右移 这种方式有个缺陷,当输入一个负数,比如0x80000000,右移一次后变成0xc0000000,不断右移后,最终变成0xFFFFFFFF,陷入死循环 //a右移的方式 ,如果输入负数原创 2017-03-23 09:05:03 · 639 阅读 · 0 评论 -
Leetcode-19. Remove Nth Node From End of List
题目删除链表的倒数第n个元素思路双指针p1, p2,p1先移动到链表的第n个元素,然后p1和p2一起移动,当p2到达末尾时,p1指向的元素即为要删除的元素的前一个元素。注意处理n大于链表长度的情况。代码class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { if(head ==原创 2017-03-04 21:37:31 · 222 阅读 · 0 评论 -
矩阵的最小路径和
题目给定一个矩阵,从左上角开始,每次只能向右或向下走,最后到达右下角位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。 如 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0思路经典动态规划方法,假设矩阵m行数为M, 列为N,先生成大小和矩阵相等的矩阵dp,dp [i][j]表示从左上角(0,0)位置走到(i, j)位置的最小路径和。对m的第一行来说,从(原创 2017-04-08 20:08:33 · 847 阅读 · 0 评论 -
Leetcode-25. Reverse Nodes in k-Group
题目Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k is a positive integer and is less than or equal to the length of the linked list. If the number of原创 2017-04-09 12:12:50 · 320 阅读 · 0 评论 -
简单优先队列实现-基于最小堆
一、什么是优先队列优先队列不是按照普通对象先进先出原FIFO则进行数据操作,其中的元素有优先级属性,优先级高的元素先出队。本文提到的优先队列,是基于最小堆原理实现。二、什么是最小堆最小堆是一个完全二叉树,所谓的完全二叉树是一种没有空节点的二叉树。最小堆的完全二叉树有一个特性是根节点必定是最小节点,子女节点一定大于其父节点。还有一个特性是叶子节点数量=全部非叶子节点数量+1在优先队列中,基于数组原创 2017-04-01 17:12:35 · 746 阅读 · 0 评论 -
Leetcode-56. Merge Intervals
题目Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 合并给定的数组中重叠的部分思路先排序,按Interval.start的升序排序,然后遍历数组,如果当前元素原创 2017-03-25 19:00:31 · 276 阅读 · 0 评论