索引数组并不好理解,再次刷到相关题目就理解多了!

220. 存在重复元素 III

  1. var containsNearbyAlmostDuplicate = function(nums, k, t) { // 索引数组
  2. let n = nums.length;
  3. let indexArr = nums.map((item, index) => index);
  4. indexArr.sort((i_a, i_b) => nums[i_a] - nums[i_b]);
  5. for (let i = 0; i < n; i++) {
  6. for (let j = i + 1; j < n; j++) {
  7. if ((Math.abs(nums[indexArr[i]] - nums[indexArr[j]]) <= t) && (Math.abs(indexArr[i] - indexArr[j]) <= k)) {
  8. return true;
  9. }
  10. }
  11. }
  12. return false;
  13. };

测试:

  1. containsNearbyAlmostDuplicate([1,5,9,1,5,9], 2, 3);

解说:(拿第一组对比就可以)
image.png

870. Advantage Shuffle

索引数组有点绕,总是不清楚。
image.png

  1. var advantageCount = function(nums1, nums2) {
  2. let n = nums1.length;
  3. nums1.sort((a, b) => a - b);
  4. let indexB = new Array(n).fill(0).map((v, i) => i);
  5. indexB.sort((a, b) => nums2[a] - nums2[b]);
  6. let ans = new Array(n).fill(0);
  7. let i = 0;
  8. let j = 0;
  9. let k = n - 1;
  10. while (i < n) {
  11. if (nums1[i] > nums2[indexB[j]]) {
  12. ans[indexB[j]] = nums1[i];
  13. i++;
  14. j++;
  15. } else {
  16. ans[indexB[k]] = nums1[i];
  17. k--;
  18. i++;
  19. }
  20. }
  21. return ans;
  22. };