力扣每日一题Day26
动机总是能战胜天赋。
题目描述:两数之和 II - 输入有序数组
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。
以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。
你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
你所设计的解决方案必须只使用常量级的额外空间。
解题代码:1234567891011121314151617class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { int i = 0, j = numbers.siz ...
力扣每日一题Day25
一个人离问题愈远就愈理想主义。
题目描述:判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
解题代码:123456789101112131415161718192021222324class Solution {public: bool isSubsequence(string s, string t) { int i = 0, j = 0; if (s.size() == 0) return true; if(s.size() > t.size()){ return false; } while (i < s.size() && j < t.size()) { ...
力扣每日一题Day24
过去的损失和失败经验,应是你采取行动,而非不采取行动的理由。
题目描述:验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
解题代码:123456789101112131415161718192021class Solution {public: bool isPalindrome(string s) { int i = 0,j = s.size() - 1; while(i < j){ while(!isalpha(s[i]) && i < j && !isdigit(s[i])){ i++; } while(!isalpha(s[j]) && ...
力扣每日一题Day23
你不造就未来,就不能控制发生在你身上的事。
题目描述:找出字符串中第一个匹配项的下标
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
解题代码:123456789101112131415161718class Solution {public: int strStr(string haystack, string needle) { if(needle.size() == 0) return 0; if(haystack.size() == 0) return -1; int i = 0, j = 0; for(i = 0; i < haystack.size(); i++){ if(haystack[i] == needle[j]){ if(j == ...
力扣每日一题Day22
但你必须不断尝试,每天表现你最好的一面。
题目描述:N 字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
123P A H NA P L S I I GY I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
请你实现这个将字符串进行指定行数变换的函数:
1string convert(string s, int numRows);
解题代码:123456789101112131415161718192021class Solution {public: string convert(string s, int numRows) { if(numRows < 2) return s; int i = 0; int flag = -1; vector ...
力扣每日一题Day21
你得先跨越恐惧才能获得你所想要的一切。
题目描述:反转字符串中的单词
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
解题代码:123456789101112131415161718192021222324252627class Solution {public: string reverseWords(string s) { string word = ""; string ans = ""; int tag = 0; for(int i = 0;i < s.length();i++){ if(s[i] == ' ...
力扣每日一题Day20
别害怕失败,只要做对一次就够了。
题目描述:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
解题代码:1234567891011121314151617181920212223242526class Solution {public: string longestCommonPrefix(vector<string>& strs) { int i; string ans_str = ""; int min_len = 1000000; for(i = 0; i < strs.size(); i++){ if(strs[i].length() < min_len){ min_len = strs[i].length(); } } i = 0; ...
力扣每日一题Day19
若想得到你从未拥有的东西,你得愿意做你从未做过的事。
题目描述:最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
解题代码:1234567891011121314151617181920212223class Solution {public: int lengthOfLastWord(string s) { int len = s.length(); int ans = 0; int i; for(i = len - 1; i >= 0; i--){ if(s[i] == ' '){ continue; }else{ break; } } ...
力扣每日一题Day18
怪罪别人绝不会让你获得成功。
题目描述:整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
12345678字符 数值I 1V 5X 10L 50C 100D 500M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (5 ...
力扣每日一题Day17
努力成为那位能获得你追寻目标的人物。
题目描述:罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
12345678字符 数值I 1V 5X 10L 50C 100D 500M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 ...
力扣每日一题Day16
大人物都是从小人物时不断地尝试而造就。
题目描述:接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
解题代码:123456789101112131415161718192021222324252627282930313233343536373839404142class Solution {public: int trap(vector<int>& height) { int h = 0; int sum = 0; int max_height = 0; int hole = 0; int wall = 0; for(int i = 0;i < height.size();i++){ max_height = max(max_height,height[i]); } while(max_height > h){ ...
力扣每日一题Day15
过分谨慎的人难有成就。
题目描述:分发糖果
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
解题代码:123456789101112131415161718192021222324252627class Solution {public: int candy(vector<int>& ratings) { int n = ratings.size(); vector<int> left(n); vector<int> right(n); int sum = 0; for(int i = 0; i < n; i++){ if(i != 0 && ratings[i] > rat ...