一些水題,gaga~~數組
給定長度爲 2n 的數組, 你的任務是將這些數分紅 n 對, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得從1 到 n 的 min(ai, bi) 總和最大。bash
示例 1:ui
輸入: [1,4,3,2]
輸出: 4
解釋: n 等於 2, 最大總和爲 4 = min(1, 2) + min(3, 4)
複製代碼
水題,在對數組內容進行分對的時候,並不須要考慮數組的順序。因此,只需將數組從小到大進行排序,而後取數組中的全部偶數位便可。spa
/** * @param {number[]} nums * @return {number} */
var arrayPairSum = function(nums) {
let result = 0
nums = nums.sort((a, b) => a - b)
for (let i = 0; i < nums.length; i+=2) {
result += nums[i]
}
return result
};
複製代碼
給定兩個字符串, A 和 B。code
A 的旋轉操做就是將 A 最左邊的字符移動到最右邊。 例如, 若 A = 'abcde',在移動一次以後結果就是'bcdea' 。若是在若干次旋轉操做以後,A 能變成B,那麼返回True。cdn
示例 1:blog
輸入: A = 'abcde', B = 'cdeab'
輸出: true
複製代碼
示例 2:排序
輸入: A = 'abcde', B = 'abced'
輸出: false
複製代碼
舉兩個例子字符串
// 例子1
var a = 'abcde'
var a2 = 'abcdeabcde' // a + a
a2.includes('cdeab') // true
// 例子2
var b = 'abcde'
var b2 = 'abcdeabcde'
b2.includes('abced') // false
複製代碼
若是B字符串由A字符串旋轉而來,那麼B字符串必然會出如今,兩個A字符串相連造成的新字符串S中。string
/** * @param {string} A * @param {string} B * @return {boolean} */
var rotateString = function(A, B) {
return A.length === B.length && ~(A + A).indexOf(B)
};
複製代碼
給定一個數組,將數組中的元素向右移動 k 個位置,其中 k 是非負數。
示例 1:
輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右旋轉 1 步: [7,1,2,3,4,5,6]
向右旋轉 2 步: [6,7,1,2,3,4,5]
向右旋轉 3 步: [5,6,7,1,2,3,4]
複製代碼
示例 2:
輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋:
向右旋轉 1 步: [99,-1,-100,3]
向右旋轉 2 步: [3,99,-1,-100]
複製代碼
當k大於nums的長度時,那麼k中只有k % nums.length
次是有效的旋轉,由於在旋轉nums.length
次時,數組就會從新回到初始的狀態。咱們在排除這些無用的旋轉後,可避免當k過大時運行超時問題。
/** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */
var rotate = function(nums, k) {
const len = nums.length
if (k > len) {
k = k % len
}
while (k > 0) {
let last = nums.pop()
nums.unshift(last)
k--
}
return nums
};
複製代碼
給定一個非空的字符串,判斷它是否能夠由它的一個子串重複屢次構成。給定的字符串只含有小寫英文字母,而且長度不超過10000。
示例 1:
輸入: "abab"
輸出: True
解釋: 可由子字符串 "ab" 重複兩次構成。
複製代碼
示例 2:
輸入: "aba"
輸出: False
複製代碼
示例 3:
輸入: "abcabcabcabc"
輸出: True
解釋: 可由子字符串 "abc" 重複四次構成。 (或者子字符串 "abcabc" 重複兩次構成。)
複製代碼
舉兩個例子
// 例子1
var a = 'abab'
var a2 = 'abababab' // a + a
a2.indexOf(a, 0) // 0
a2.indexOf(a, 1) // 2
a2.indexOf(a, 3) // 4
複製代碼
當一個字符串A
是由它的一個子串重複屢次構成時,那麼兩個字符串A
相加造成的新字符串S
中,至少包含3次的A
。
/** * @param {string} s * @return {boolean} */
var repeatedSubstringPattern = function(s) {
return (s + s).indexOf(s, 1) !== s.length
};
複製代碼
給定一個偶數長度的數組,其中不一樣的數字表明着不一樣種類的糖果,每個數字表明一個糖果。你須要把這些糖果平均分給一個弟弟和一個妹妹。返回妹妹能夠得到的最大糖果的種類數。
示例 1:
輸入: candies = [1,1,2,2,3,3]
輸出: 3
解析: 一共有三種種類的糖果,每一種都有兩個。
最優分配方案:妹妹得到[1,2,3],弟弟也得到[1,2,3]。這樣使妹妹得到糖果的種類數最多。
複製代碼
示例 2 :
輸入: candies = [1,1,2,3]
輸出: 2
解析: 妹妹得到糖果[2,3],弟弟得到糖果[1,1],妹妹有兩種不一樣的糖果,弟弟只有一種。這樣使得妹妹能夠得到的糖果種類數最多。
複製代碼
注意:
對數組進行去重後獲得的數組的長度,既是糖果種類的長度。
若是糖果種類的長度,大於所有糖果數量的一半,妹妹能夠最多得到糖果數量 / 2
種類的糖果。
若是糖果種類的長度,小於所有糖果數量的一半,妹妹能夠得到所有種類的糖果。
/** * @param {number[]} candies * @return {number} */
var distributeCandies = function(candies) {
const k = new Set(candies).size
return k > candies.length / 2 ? candies.length / 2 : k
};
複製代碼