/** * @param {character[]} s * @return {void} Do not return anything, modify s in-place instead. */ var reverseString = function(s) { return s.reverse(); };
答案二
其实本题并不是想考reverse, 感觉应该是想考reverse的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/** * @param {character[]} s * @return {void} Do not return anything, modify s in-place instead. */ var reverseString = function(s) { var len = s.length; for(var i = 0, center = Math.floor(len / 2); i < center; i++) { let edx = len - i - 1; let temp = s[edx]; s[edx] = s[i]; s[i] = temp; } return s; };
let lWords = words.map(val => val.toLowerCase()); let leng = lWords.length;
let result = [];
lWords.forEach((str, key) => { let flag = true; let first = alObj[str.charAt(0)]; for(let i = 0; i < str.length; i++) { let current = alObj[str.charAt(i)]; if(first !== current) { flag = false; break; } } if(flag) { result.push(words[key]); } });
return result;
};
答案二
正则表达式匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
var findWords = function(words) { let reg1 = newRegExp("[qwertyuiop]", "i"); let reg2 = newRegExp("[asdfghjkl]", "i"); let reg3 = newRegExp("[zxcvbnm]", "i"); let result = []; words.forEach(word => { let flag1 = reg1.test(word); let flag2 = reg2.test(word); let flag3 = reg3.test(word);
/** * @param {string[]} A * @return {number} */ var minDeletionSize = function(A) { let len = A.length; let leng = A[0].length; let result = 0;
for(let j = 0; j < leng; j++) { for(let i = 0; i < len - 1; i++) { let prev = A[i].charCodeAt(j); let next = A[i+1].charCodeAt(j); if(prev > next) { result++; break; } } } return result; };
答案二
跟js解法是一样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution { publicintminDeletionSize(String[] A) { intans=0; for (intc=0; c < A[0].length(); ++c) for (intr=0; r < A.length - 1; ++r) if (A[r].charAt(c) > A[r+1].charAt(c)) { ans++; break; }
/** * @param {number[]} A * @param {number} K * @return {number} */ var smallestRangeI = function(A, K) { // 从小到大排序 A = A.sort((a, b) => (a - b)); let len = A.length;
letAf = A[0]; letAl = A[len - 1];
let M = []; for(let i = -K; i <= K; i++) { M.push([ Af + i, Al + i ]);
} let klen = K - (-K) + 1; let delNum = M[0][1] - M[klen-1][0]; return delNum <= 0 ? 0 : delNum;
};
后来看了题解发现本题解的还是不够清晰,这里copy一下题解分析来得到答案二
答案二
假设 A 是原始数组,B 是修改后的数组,我们需要最小化 max(B) - min(B),也就是分别最小化 max(B) 和最大化 min(B)。
否则 B[i]=A[i]。 如果 ans < 0,最终结果会有 ans = 0,同样利用上面的修改方式。
1 2 3 4 5 6 7 8 9 10
classSolution { publicintsmallestRangeI(int[] A, int K) { letmin= A[0], max = A[0]; for(int x : A) { min = Math.min(min, x); max = Math.max(max, x); } return Math.max(0, max - min - 2*K); } }