C++/Java小白解Leetcode题

题解:

class Solution {

public int countSegments(String s) {

int count=0;

s=s.trim();

if(s.equals(""))

count=0;

else

{

String[] word=s.trim().split("\\s+");

count=word.length;

}

return count;

}

}

开始直接想到Java的函数,对这道题可以简单处理,容易解决。不过期间有几个注意点,就是处理连续空格和边界情况。

后来尝试C++手写方法,效果更好:

思路:使用一个flag标识每个单词分界点,如果当前字符不是空格且它前一个为空格(即此处分隔单词边界),则计数新单词个数。

class Solution {

public:

int countSegments(string s) {

int flag=1,count=0;

for(int i=0;i {

if(s[i]!=' '&&flag)

{

count++;

flag=0;

}

if(s[i]==' ')

flag=1;

}

return count;

}

};

/*

作者:lu-hai-pan-jiang

链接:https://leetcode-cn.com/problems/number-of-segments-in-a-string/solution/jian-dan-zhi-jie-si-lu-ji-bai-100-by-lu-hai-pan-ji/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

*/

三、最富有客户的资产总量

给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。

客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。

示例 1:

输入:accounts = [[1,2,3],[3,2,1]]

输出:6

解释:

第 1 位客户的资产总量 = 1 + 2 + 3 = 6

第 2 位客户的资产总量 = 3 + 2 + 1 = 6

两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。

示例 2:

输入:accounts = [[1,5],[7,3],[3,5]]

输出:10

解释:

第 1 位客户的资产总量 = 6

第 2 位客户的资产总量 = 10

第 3 位客户的资产总量 = 8

第 2 位客户是最富有的,资产总量是 10

示例 3:

输入:accounts = [[2,8,7],[7,1,3],[1,9,5]]

输出:17

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/richest-customer-wealth

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Hint:

m == accounts.length

n == accounts[i].length

1 <= m, n <= 50

1 <= accounts[i][j] <= 100

这题目是签到题,思路直接简单。

class Solution {

public int maximumWealth(int[][] accounts) {

int maxV=0;

for(int i=0;i {

int sum=0;

for(int j=0;j sum+=accounts[i][j];

if(maxV maxV=sum;

}

return maxV;

}

}

四、三角形的最大周长

给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。

如果不能形成任何面积不为零的三角形,返回 0。

示例 1:

输入:[2,1,2]

输出:5

示例 2:

输入:[1,2,1]

输出:0

示例 3:

输入:[3,2,3,4]

输出:10

示例 4:

输入:[3,6,2,3]

输出:8

提示:

3 <= A.length <= 10000

1 <= A[i] <= 10^6

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/largest-perimeter-triangle

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:先将边长降序排列,从后往前扫描,贪心的思想,取得能够组成三角形的最大周长。

C++版本:

class Solution {

public:

int largestPerimeter(vector& A) {

sort(A.begin(),A.end());

for(int i=A.size()-1;i>=2;i--)

{

if(A[i-2]+A[i-1]>A[i])

return A[i-2]+A[i-1]+A[i];

}

return 0;

}

};

Java版本:运行用时更短,奇怪了(・。・)

class Solution {

public int largestPerimeter(int[] A) {

Arrays.sort(A);

for(int i=A.length-1;i>=2;i--)

{

if(A[i-2]+A[i-1]>A[i])

return A[i-2]+A[i-1]+A[i];

}

return 0;

}

}

五、找出最具竞争力的子序列(中等难度)

给你一个整数数组 nums 和一个正整数 k ,返回长度为 k 且最具 竞争力 的 nums 子序列。数组的子序列是从数组中删除一些元素(可能不删除元素)得到的序列。

在子序列 a 和子序列 b 第一个不相同的位置上,如果 a 中的数字小于 b 中对应的数字,那么我们称子序列 a 比子序列 b(相同长度下)更具 竞争力 。 例如,[1,3,4] 比 [1,3,5] 更具竞争力,在第一个不相同的位置,也就是最后一个位置上, 4 小于 5 。

示例 1:

输入:nums = [3,5,2,6], k = 2

输出:[2,6]

解释:在所有可能的子序列集合 {[3,5], [3,2], [3,6], [5,2], [5,6], [2,6]} 中,[2,6] 最具竞争力。

示例 2:

输入:nums = [2,4,3,3,5,4,9,6], k = 4

输出:[2,3,3,4]

提示:

1 <= nums.length <= 105

0 <= nums[i] <= 109

1 <= k <= nums.length

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/find-the-most-competitive-subsequence

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

前面几道属于简单类型,这道中等题目就显得有些分量了,题目需要琢磨一会才知道是要干啥,就题做题。

看到一个大佬的解题思路,这个比较好理解:传送门

维护一个单调栈,从左到右遍历数组。

1、如果当前元素比队尾元素小,接下来判断剩余数组长度(len - i)和目标栈还需要元素个数(k - stack.size() + 1)大小。

    1.1 如果前者小于或等于后者,则说明不能再出栈了,否则剩余数组全加进栈也不够将栈填到k+1长度。(需要k+1而不是k是因为一开始就填进了-1,但这个-1是不会被返回的)

    1.2 如果前者大于后者,就将队尾元素出栈,并重复第一步

2、如果栈长度不够,不用判断,直接将当前元素进栈即可。

class Solution {

public int[] mostCompetitive(int[] nums, int k) {

Stack stack = new Stack<>();

stack.add(-1);

int len = nums.length;

for (int i = 0; i < len; i++) {

//当前元素比队尾元素小,将队尾元素出栈

//此处需要另外判断数组剩余长度够不够填满栈,不然最后答案长度可能会小于k

while (nums[i] < stack.peek() && k - stack.size() + 1 < len - i) {

stack.pop();

}

if (stack.size() < k + 1) {

stack.add(nums[i]);

}

}

int[] ret = new int[k];

while (k > 0) {

ret[--k] = stack.pop();

}

return ret;

}

}

————————————

龙华大道1号 http://www.kinghill.cn/Dynamics/2106.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容