題解:
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的函數(shù)命满,對這道題可以簡單處理达椰,容易解決润梯。不過期間有幾個注意點(diǎn)毕匀,就是處理連續(xù)空格和邊界情況。
后來嘗試C++手寫方法肿轨,效果更好:
思路:使用一個flag標(biāo)識每個單詞分界點(diǎn),如果當(dāng)前字符不是空格且它前一個為空格(即此處分隔單詞邊界)荡澎,則計數(shù)新單詞個數(shù)。
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)
著作權(quán)歸作者所有晤锹。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)摩幔,非商業(yè)轉(zhuǎn)載請注明出處。
*/
三鞭铆、最富有客戶的資產(chǎn)總量
給你一個 m x n 的整數(shù)網(wǎng)格 accounts 或衡,其中 accounts[i][j] 是第 i????? 位客戶在第 j 家銀行托管的資產(chǎn)數(shù)量。返回最富有客戶所擁有的 資產(chǎn)總量 车遂。
客戶的 資產(chǎn)總量 就是他們在各家銀行托管的資產(chǎn)數(shù)量之和封断。最富有客戶就是 資產(chǎn)總量 最大的客戶。
示例 1:
輸入:accounts = [[1,2,3],[3,2,1]]
輸出:6
解釋:
第 1 位客戶的資產(chǎn)總量 = 1 + 2 + 3 = 6
第 2 位客戶的資產(chǎn)總量 = 3 + 2 + 1 = 6
兩位客戶都是最富有的舶担,資產(chǎn)總量都是 6 坡疼,所以返回 6 。
示例 2:
輸入:accounts = [[1,5],[7,3],[3,5]]
輸出:10
解釋:
第 1 位客戶的資產(chǎn)總量 = 6
第 2 位客戶的資產(chǎn)總量 = 10
第 3 位客戶的資產(chǎn)總量 = 8
第 2 位客戶是最富有的衣陶,資產(chǎn)總量是 10
示例 3:
輸入:accounts = [[2,8,7],[7,1,3],[1,9,5]]
輸出:17
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/richest-customer-wealth
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有柄瑰。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處剪况。
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;
}
}
四拯欧、三角形的最大周長
給定由一些正數(shù)(代表長度)組成的數(shù)組 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
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有该贾。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)羔杨,非商業(yè)轉(zhuǎn)載請注明出處。
思路:先將邊長降序排列杨蛋,從后往前掃描兜材,貪心的思想,取得能夠組成三角形的最大周長逞力。
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版本:運(yùn)行用時更短曙寡,奇怪了(?。?)
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;
}
}
五寇荧、找出最具競爭力的子序列(中等難度)
給你一個整數(shù)數(shù)組 nums 和一個正整數(shù) k 举庶,返回長度為 k 且最具 競爭力 的 nums 子序列。數(shù)組的子序列是從數(shù)組中刪除一些元素(可能不刪除元素)得到的序列揩抡。
在子序列 a 和子序列 b 第一個不相同的位置上户侥,如果 a 中的數(shù)字小于 b 中對應(yīng)的數(shù)字镀琉,那么我們稱子序列 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
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)曹体,非商業(yè)轉(zhuǎn)載請注明出處俗扇。
前面幾道屬于簡單類型,這道中等題目就顯得有些分量了箕别,題目需要琢磨一會才知道是要干啥铜幽,就題做題。
看到一個大佬的解題思路串稀,這個比較好理解:傳送門
維護(hù)一個單調(diào)棧除抛,從左到右遍歷數(shù)組。
1母截、如果當(dāng)前元素比隊尾元素小到忽,接下來判斷剩余數(shù)組長度(len - i)和目標(biāo)棧還需要元素個數(shù)(k - stack.size() + 1)大小。
? ? 1.1 如果前者小于或等于后者清寇,則說明不能再出棧了喘漏,否則剩余數(shù)組全加進(jìn)棧也不夠?qū)L畹絢+1長度。(需要k+1而不是k是因?yàn)橐婚_始就填進(jìn)了-1华烟,但這個-1是不會被返回的)
? ? 1.2 如果前者大于后者翩迈,就將隊尾元素出棧,并重復(fù)第一步
2盔夜、如果棧長度不夠负饲,不用判斷,直接將當(dāng)前元素進(jìn)棧即可喂链。
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++) {
//當(dāng)前元素比隊尾元素小返十,將隊尾元素出棧
//此處需要另外判斷數(shù)組剩余長度夠不夠填滿棧,不然最后答案長度可能會小于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