1. 第三大的数
找到一个数组第三大的数并返回这个数,如果没有就返回最大的数。
/** * @param {number[]} nums * @return {number} */ var thirdMax = function(nums) { for (i = 0; i < nums.length; i++){ for (j = i+1; j < nums.length; j++){ if (nums[i] == nums[j]){ nums.splice(j, 1); --j; } } } //现在数组中没有重复元素了 nums.sort((a, b) => b - a); return nums.length>2 ? nums[2] : nums[0]; };
Tips: 这道题包含一个去除数组中重复元素的方法。注意那个--j。
2. 和为k的子数组
/** * @param {number[]} nums * @param {number} k * @return {number} */ var subarraySum = function(nums, k) { let count = 0; for (let start = 0; start < nums.length; ++start) { let sum = 0; for (let end = start; end >= 0; --end) { sum += nums[end]; if (sum == k) { count++; } } } return count; };
Tips: 这道题的重点在于掌握双重循环,第二层可以从后往前计算和的方法。
3. 数组嵌套
如果一个数组S[i] = [ A[i], A[A[I]], A[A[A[I]]], ......],则称为一个嵌套数组。返回给定数组的最大嵌套数组长度。
/** * @param {number[]} nums * @return {number} */ var arrayNesting = function(nums) { let ans = 0; for(let i = 0; i < nums.length; i++) { let start = i; let count = 0; //长度计数器 while(nums[start] !== Infinity) { count++; let temp = start; start = nums[start]; nums[temp] = Infinity; } if(count > ans) ans = count; } return ans; };
Tips: 注意黄色高亮部分,这是打破while循环的方式。一开始只想到了置为一个特定值,没有想到可以利用Infinity这个特殊值。粉色部分是嵌套数组的方法。