leetcode
瞌睡虫zZ
做一名安静的程序猿
展开
-
122. 买卖股票的最佳时机 II
给定一个数组 prices ,其中prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。方法:贪心算法假设每天都有交易,今天买明天卖,若两天的股票价格差大于0,则说明有利润;若小于等于0,则没有利润,将所有大于0的差值进行累加即为最大利润。class Solution {public: int maxProfit(vec.原创 2021-08-23 16:52:01 · 84 阅读 · 0 评论 -
27.移除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。方法:快慢指针快指针寻找不等于val的元素,将其存储在慢指针指向的下标处。class Solution {public: int removeElement(vector<int>& nums, int ...原创 2021-08-19 16:05:42 · 82 阅读 · 0 评论 -
26. 删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。方法:双指针设置两个标记fast,slow,fast用来寻找下一个不重复原创 2021-08-17 19:39:05 · 93 阅读 · 0 评论 -
125.验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串方法:双指针法在原有字符串上直接判断,设置i,j分别指向字符串的首尾字符,首先判断是否为字符或数字,若不是则后移或前进,直到两个都为字符或数字再判断是否相等。class Solution {p原创 2021-08-16 11:29:16 · 81 阅读 · 0 评论 -
234.回文链表(C++)
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false方法:将链表中的数字存入字符串中,判断字符串是否为回文/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(..原创 2021-08-16 10:29:00 · 503 阅读 · 0 评论 -
9. 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。class Solution {public: bool isPalindrome(int x) .原创 2021-08-11 17:34:20 · 79 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,"123"...原创 2021-08-11 10:31:50 · 121 阅读 · 0 评论 -
7.整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−2^31,2^31− 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321思路:本题主要考虑两个点,第一从x中拿到每一位,比较简单,取模除十循环即可;第二拿到数字后如何存储,并且要判断是否有溢出。假设拿到的数字是num,存储的结果是ans,那ans=ans*10+num,问题即判断ans溢出问...原创 2021-08-05 17:52:45 · 135 阅读 · 0 评论 -
6.字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "PAYPALISHIRING"行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int...原创 2021-08-03 19:55:05 · 310 阅读 · 0 评论 -
3.无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。方法:暴力遍历创建向量存储无重复的字符。处理第一个字符开头的字符串abcabcbb,逐字符遍历,判断向量中是否有该元素,若无则存入,若有说明有重复字符,记录子串长度。清空向量,同样处理以第二个字符开头的字符串bcabcbb,依次处理第三个字符开头的字符串cabcbb,最后返回最大的子串长度即可...原创 2021-08-02 17:25:44 · 130 阅读 · 0 评论 -
989.数组形式的整数加法
对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231,那么其数组形式为[1,2,3,1]。给定非负整数 X 的数组形式A,返回整数X+K的数组形式。示例 1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234方法:逐位相加,逢十进一...原创 2021-07-31 10:14:17 · 161 阅读 · 0 评论 -
415.字符串相加
给定两个字符串形式的非负整数num1和num2,计算它们的和。方法:逐位相加,逢十进一,与67二进制求和是一类题class Solution {public: string addStrings(string num1, string num2) { reverse(num1.begin(), num1.end()); reverse(num2.begin(), num2.end()); int len1 = num1.length(...原创 2021-07-30 17:27:45 · 74 阅读 · 0 评论 -
67.二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"方法:逐位相加,逢二进一class Solution {public: string addBinary(string a, string b) { reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); ...原创 2021-07-30 17:13:05 · 283 阅读 · 0 评论 -
2. 两数相加(C++)
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.方法:链表相加思路:链表逆序存储数字,则链表头部节点开始分别代表个十百千位,两个链表对应节点相加即为和的相应位,注意考虑进位...原创 2021-07-29 17:01:34 · 1502 阅读 · 0 评论 -
653. 两数之和 IV - 输入 BST
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。示例 1:输入: root = [5,3,6,2,4,null,7], k = 9输出: true方法:中序遍历+双指针二叉搜索树BST(Binary Search Tree)的特点是左子树节点值永远小于根节点,右子树节点值永远大于根节点,中序遍历(左子树—>根节点—>右子树)二叉搜索树的结果是有序的。解题思路即为中序遍历二叉树存放在数组中,再使.原创 2021-07-29 15:40:27 · 117 阅读 · 0 评论 -
167.两数之和 II - 输入有序数组
给定一个已按照 升序排列的整数数组numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例 1:输入:numbers = [2,7,11,15], tar...原创 2021-07-28 15:11:33 · 106 阅读 · 0 评论 -
1.两数之和(C++)
给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。方法一:暴力法class Solution {pub...原创 2021-07-27 16:05:17 · 2587 阅读 · 0 评论