
力扣&&剑指offer
算法题刷题
Estelle_Z
这个作者很懒,什么都没留下…
展开
-
力扣 翻转字符串字的单词【C++】
翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。解析:我们可以分两步进行(1)首先翻转整个字符串(2)遍历翻转后的字符串,去掉字符串中多余的空格,翻转每个单词,最后去掉字符串结尾的多余空格cla...原创 2020-09-15 14:34:34 · 242 阅读 · 0 评论 -
力扣 存在重复元素 【C++】
存在重复元素给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且 i 和 j的差的 绝对值 至多为 k。示例1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2输出: false分析:可以用一个哈希表来存放每个元素的下标,遍...原创 2020-09-12 16:13:50 · 217 阅读 · 0 评论 -
力扣 二叉树的层平均值
二叉树的层平均值给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:输入: 3 / \ 9 20 / \ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。解析:这个题类似于二叉树的层次遍历,并且把每层的元素分别存储,返回一个二维数组代码如下:/** * Definition for a binary tree...原创 2020-09-12 11:13:24 · 187 阅读 · 0 评论 -
力扣N数相加总结【C++】
1. 两数之和给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]分析:首先,我们可以想到暴力法,用两层for循环来找;我们也可以用哈希表来存放第一个数组中的元素和对应的下标,然...原创 2020-09-12 15:30:30 · 556 阅读 · 1 评论 -
力扣数组经典题 【C++】
class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int minLen=INT_MAX; if(nums.size()==0) return 0; for(int i=0;i<nums.size();i++) { int sum=0; for(int j=i;j<.原创 2020-09-06 21:08:30 · 681 阅读 · 0 评论 -
力扣283 移动零【C++】
移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。分析:这个题有两个要求:(1)把零元素移动到数组末尾 (2)保持非零元素的相对顺序我们可以遍历一遍数组,用j来记录当前不为0的元素的下标位置,当遇到下标为零的元素,就把它的值赋给j位置的元素,最后j位置之前的元素全部为非零元素,将j后面的元素全部置为0即可。原创 2020-09-03 11:14:38 · 284 阅读 · 0 评论 -
【动态规划】-剪绳子,整数拆分
剪绳子给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4,.原创 2020-08-28 20:58:08 · 208 阅读 · 0 评论 -
力扣21 合并两个有序链表【C++】
合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4方法一:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNo.原创 2020-08-26 17:19:13 · 422 阅读 · 0 评论 -
力扣 阶乘尾数【C++】
阶乘尾数设计一个算法,算出 n 阶乘有多少个尾随零。示例 1:输入: 3输出: 0解释:3! = 6, 尾数中没有零。示例2:输入: 5输出: 1解释:5! = 120, 尾数中有 1 个零.分析:要在末尾产生0,那么肯定是5*2,就算是原数中包含0也可以分解,所以我们把题目简化为寻找阶乘中5的个数,即n/5,但是要考虑到这只找到了n中是5倍数的所有数,例如25,即在25!中找到了5个是5的倍数的数分别为5,10,15,20,25,要注意这之中的25依然可以分解为5的倍数...原创 2020-08-26 11:39:56 · 304 阅读 · 0 评论 -
力扣27 移除元素【C++】
移除元素给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,1...原创 2020-08-25 16:39:18 · 1405 阅读 · 0 评论 -
力扣35 搜索插入位置【C++】
题目来源:https://leetcode-cn.com/problems/search-insert-position/给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输.原创 2020-08-24 21:54:15 · 356 阅读 · 0 评论 -
力扣459-重复的子字符串
重复的子字符串给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。示例 2:输入: “aba”输出: False示例 3:输入: “abcabcabcabc”输出: True解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)class Solution {public:原创 2020-09-15 15:14:27 · 246 阅读 · 0 评论 -
力扣1544 -整理字符串
给你一个由大小写英文字母组成的字符串 s 。一个整理好的字符串中,两个相邻字符 s[i] 和 s[i + 1] 不会同时满足下述条件:0 <= i <= s.length - 2s[i] 是小写字符,但 s[i + 1] 是相同的大写字符;反之亦然 。请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。注意:空字符串也属于整理好的字符串,尽管原创 2020-08-23 23:39:19 · 543 阅读 · 0 评论 -
栈实现队列,栈的最小值
剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","de.原创 2020-08-23 11:07:08 · 397 阅读 · 0 评论 -
剑指Offer-重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。考查的知识点:树、dfs、数组首先,我们要知道树的遍历有以下三种:前序遍历:根->左->右中序遍历:左->根->右后序遍历:左->右->根已知前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1原创 2020-08-19 22:07:43 · 111 阅读 · 0 评论 -
剑指Offer-从尾到头打印链表
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。本题知识点:链表看到这道题:第一个想到的就是首先存到vector里,然后reverse代码如下:/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/vector<原创 2020-08-19 21:21:46 · 96 阅读 · 0 评论 -
剑指Offer-替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。本题考点:字符串这里我们看一下char*和char[]的区别:char[]定义的是一个字符数组,数组中的元素是字符强调的是数组 char str[10]; 定义了一个有十个元素的数组,元素类型为字符。 C语言中定义一个变量时可以初始化。 char str[10] = {"hello worl原创 2020-08-19 19:48:29 · 175 阅读 · 0 评论 -
剑指offer-二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。本题考查的知识点是:数组、查找首先回顾下常用的查找算法:顺序查找和二分查找顺序查找:逐个的查找,找到返回true或该元素下标,找不到则返回false或-1;二分查找:前提是有序数组中查找,从中间元素开始,若找到则返回true或该元素下标,如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素原创 2020-08-19 18:36:22 · 169 阅读 · 0 评论