1403. 非递增顺序的最小子序列
思路:排序后从首位开始查找即可
/**
* @param {number[]} nums
* @return {number[]}
*/
var minSubsequence = function(nums) {
if(nums.length === 0) {
return [];
}
const sum = nums.reduce((res, i) => res + i);
nums.sort((a,b) => b-a)
console.log(nums)
let res = 0;
let i = 0;
for(; i < nums.length; i++) {
res += nums[i];
console.log(sum - res, res);
if(sum - res < res) {
break;
}
}
return nums.slice(0, i + 1);
};
1404. 将二进制表示减到 1 的步骤数
思路:
二进制表示中尾数为1为奇数,尾数为0为偶数。
1:从后向前数1的个数,len(1)+1为此段区间的步数,并将此段最前面一位1-1设置为1 例:1110111 第一次:变为1111(111),步数为括号中的3+1=4
2:数0个数,step为0的个数
3:以此类推,直到结果为1
/**
* @param {string} s
* @return {number}
*/
var numSteps = function(s) {
let step = 0;
let sArr = s.split('');
let len = 0;
for(let i = sArr.length - 1; i >= 0; i--) {
if(i === 0 && sArr[i] === '1' && (sArr[i+1] === '0' || sArr.length === 1) ) {
return step;
}
if(sArr[i] === '0') {
for(let j = i; j >= 0; j--) {
if(sArr[j] === '0') {
step++;
} else {
i = j + 1;
break;
}
}
} else if(sArr[i] === '1') {
let fl = false;
for(let j = i; j >= 0; j--) {
if(sArr[j] === '1') {
step++;
} else {
step++;
i = j + 1;
sArr[j] = '1';
fl = true;
break;
}
}
if(!fl) {
step++;
i=0;
}
}
}
return step;
};
1405. 最长快乐字符串
思路:
字符按照数量排序后取数量最大字符插入(2个,如只有1个则插入1个),然后插入数量最少的字符
注意判断排序后最大字符是否与字符串尾数相同,如果相同,则只插入一个
!!!此题不存在为空的情况,因为只要a,b,c > 0,那就必定至少有一个"a","b","c"兜底
/**
* @param {number} a
* @param {number} b
* @param {number} c
* @return {string}
*/
var longestDiverseString = function(a, b, c) {
let str = '';
const arr = [
{key: 'a', val: a},
{key: 'b', val: b},
{key: 'c', val: c}
];
const getSorted = () => {
arr.sort((oa, ob) => {
return ob.val - oa.val
});
}
getSorted();
while(arr[0].val !== 0) {
if(arr[0].val === 1) {
arr[0].val -= 1;
str += arr[0].key;
} else {
if(arr[0].key === str[str.length - 1]) {
arr[0].val -= 1;
str += arr[0].key;
} else {
arr[0].val -= 2;
str += arr[0].key + arr[0].key;
}
}
if(arr[2].val === 0) {
if(arr[1].val === 0) {
return str;
} else {
arr[1].val -= 1;
str += arr[1].key;
}
} else {
arr[2].val -= 1;
str += arr[2].key;
}
getSorted();
console.log(arr, str);
}
return str;
};
1406. 石子游戏 III
属于我的算法盲区--动态规划……学习后再来