Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 538915b

Browse files
author
zhangxing
committed
feat: put 有多少小于当前数字的数字
1 parent db35733 commit 538915b

File tree

2 files changed

+66
-23
lines changed

2 files changed

+66
-23
lines changed

‎按奇偶排序数组 II.js‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// 给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。
2+
3+
// 对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。
4+
5+
// 你可以返回 任何满足上述条件的数组作为答案 。
6+
7+
// 示例 1:
8+
// 输入:nums = [4,2,5,7]
9+
// 输出:[4,5,2,7]
10+
// 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
11+
12+
// 示例 2:
13+
// 输入:nums = [2,3]
14+
// 输出:[2,3]
15+
var sortArrayByParityII = function (nums) {
16+
// TODO
17+
};

‎有多少小于当前数字的数字.js‎

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,31 +43,57 @@ var smallerNumbersThanCurrent = function (nums) {
4343
return res;
4444
};
4545

46-
console.log(smallerNumbersThanCurrent([6,5,4,8]));
46+
console.log(smallerNumbersThanCurrent([8,1,2,2,3]));
4747

48-
//对数组进行排序,并记录每一个数在原数组中的位置。
48+
// 错误解
49+
// var smallerNumbersThanCurrent2 = function (nums) {
50+
// // 记录原始位置
51+
// let record = {};// 使用对象,原数组中重复的元素就没法记录了, 所以需要数组来记录
52+
// for (let i = 0; i < nums.length; i++) {
53+
// record[Symbol(nums[i])].idx = i;
54+
// }
55+
// let numsCopy = nums.sort(); // 1,2,2,3,8
56+
// for (let i = 0; i < numsCopy.length; i++) {
57+
// const arr = nums.slice(0, i);
58+
// record[numsCopy[i]].count = arr.filter(
59+
// (item, index) => arr.indexOf(item) < nums[i]
60+
// ).length;
61+
// }
62+
63+
// console.log(record);
64+
65+
// let res = new Array(nums.length).fill(0);
66+
// Object.values(record).forEach(({ idx, count }) => {
67+
// res[idx] = count;
68+
// });
69+
// // for...of 不能用来遍历对象; for in 可以,但是for...in遍历的是索引而不是值
70+
// // for ({ idx, count } of record) {
71+
// // res[idx] = count;
72+
// // }
73+
// return res;
74+
// };
75+
76+
//对数组进行排序,并记录每一个数在原数组中的位置。对于排序后的数组中每一个数,我们找出其左侧第一个小于它的数,这样就能够知道数组中小于该数字的数量
4977
var smallerNumbersThanCurrent2 = function (nums) {
50-
// 记录原始位置
51-
let record = {};
52-
for (let i = 0; i < nums.length; i++) {
53-
record[nums[i]] = {};
54-
record[nums[i]].idx = i;
78+
const n = nums.length;
79+
// [[0, 0], [0, 0], ...]
80+
// 记录原索引和值
81+
const data = new Array(n).fill(0).map((v) => new Array(2).fill(0));
82+
for (let i = 0; i < n; ++i) {
83+
data[i][0] = nums[i];
84+
data[i][1] = i;
5585
}
56-
let numsCopy = nums.sort(); // 4,5,6,8
57-
for (let i = 0; i < numsCopy.length; i++) {
58-
record[numsCopy[i]].count = i;
86+
data.sort((a, b) => a[0] - b[0]);
87+
const ret = new Array(n);
88+
let prev = -1;
89+
for (let i = 0; i < n; ++i) {
90+
// [1,2,2,3,8]
91+
// 使用prev来越过重复元素, 比如第二个2和第一个2重复,那么就取上一次的pre,也就是取第一个2满足条件的pre
92+
if (prev == -1 || data[i][0] !== data[i - 1][0]) {
93+
prev = i;
94+
}
95+
ret[data[i][1]] = prev;
5996
}
60-
61-
let res = new Array(nums.length).fill(0);
62-
Object.values(record).forEach(({ idx, count }) => {
63-
console.log(idx, count);
64-
res[idx] = count;
65-
});
66-
// for...of 不能用来遍历对象; for in 可以,但是for...in遍历的是索引而不是值
67-
// for ({ idx, count } of record) {
68-
// res[idx] = count;
69-
// }
70-
return res;
97+
return ret;
7198
};
72-
73-
console.log(smallerNumbersThanCurrent2([6, 5, 4, 8]));
99+
console.log(smallerNumbersThanCurrent2([8, 1, 2, 2, 3]));

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /