postgresql 遍历字符串数组_每日一道编程题(348):1005.K次取反后最大化的数组和...
每日編程中遇到任何疑問、意見、建議請公眾號留言或直接撩Q474356284(備注每日編程)
給定一個整數數組 A,我們只能用以下方法修改該數組:我們選擇某個個索引?i?并將?A[i]?替換為?-A[i],然后總共重復這個過程?K?次。(我們可以多次選擇同一個索引?i。)
以這種方式修改數組后,返回數組可能的最大和。
示例 1:
輸入:A = [4,2,3], K = 1輸出:5解釋:選擇索引 (1,) ,然后 A 變為 [4,-2,3]。示例 2:
輸入:A = [3,-1,0,2], K = 3輸出:6解釋:選擇索引 (1, 2, 2) ,然后 A 變為 [3,1,0,2]。示例 3:
輸入:A = [2,-3,-1,5,-4], K = 2輸出:13解釋:選擇索引 (1, 4) ,然后 A 變為 [2,3,-1,5,4]。提示:
1 <= A.length <= 10000
1 <= K <= 10000
-100 <= A[i] <= 100
解決方法:
(1)算法的基本思想:
算法一:
只要K未減為0,每次都找到數組的最小值,將其取反,最后求和。
算法二:
對數組從大至小排序,遍歷數組。
如果當前數組元素大于0,則加至res
如果當前數組元素小于0,
????????K大于0,則取反,加至res中
????????K小于等于0,直接加至res中
遍歷完數組后對K進行判斷,如果K為奇數,則res需要減去最后一個元素(最小值)的2倍。
(注:比如4,3,2數組,K = 1,res = 4+3+2,如果K為偶數,我們可以將2取反變成-2,再取反變成2,但是如果K為奇數,我們總要將數組中的其中一個數取反,而在遍歷數組的過程中,我們遇到正的就加起來了,并未取反,所以最后需要減掉最小值的2倍)
(2)代碼實現:
class?Solution{
public:
????int?largestSumAfterKNegations(vector<int>?&A,?int?K){
????????while?(K--)
????????{
????????????auto?smallest?=?min_element(begin(A),?end(A));
????????????(*smallest)?*=?-1;
????????}
????????return?accumulate(A.begin(),?A.end(),?0);
????}
};class?Solution
{
public:
????int?largestSumAfterKNegations(vector<int>?&A,?int?K){
????????sort(A.begin(),?A.end(),?[](int?a,?int?b)?{?return?abs(a)?>?abs(b);?});
????????int?res?=?0;
????????for?(int?ele?:?A)
????????{
????????????if?(ele?>=?0)
????????????????res?+=?ele;
????????????else
????????????????K?>?0???res?+=?-ele,?K--?:?res?+=?ele;
????????}
????????//?res?=?x?+?abs(s)?==>?what?we?want?is?res?=?x?-?abs(s),?so:
????????if?(K?%?2)
????????????res?-=?2?*?abs(A.back());
????????return?res;
????}
};
明日預告:中南大學上機題(一)
大家都很關心考試的難易程度。K老師出題有一個規律,在出題之前,他會隨機寫下一個字符串,只要在這個字符串中能按順序找到E,A,S,Y四個字母,他出題就會比較簡單。你拿到了字符串,請你告訴別人題目難不難吧。
輸入格式:
輸入的數據有多組,每組占一行,由一個字符串組成(字符串的長度不超過1000)。
輸出格式:
對于每組輸入數據,輸出一行,對應一個要求的答案(題目簡單就輸出easy,難就輸出difficult)輸入樣例:
eAsySEoAtSNY
輸出樣例:
difficulteasy
總結
以上是生活随笔為你收集整理的postgresql 遍历字符串数组_每日一道编程题(348):1005.K次取反后最大化的数组和...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle数据库密码复杂度查询,Ora
- 下一篇: python烦恼_新人刚学python可