巧妙的题

相同类型的题目

借助高低位,原地解决问题的一种算法思路,目前还没有研究透测。已经看到两次了。

迭代法,同步遍历,非常牛逼的一个思路.

原地构建

给你一个 从 0 开始的排列 nums(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans[i] = nums[nums[i]] 。返回构建好的数组 ans 。

从 0 开始的排列 nums 是一个由 0 到  nums.length - 1(0 和 nums.length - 1 也包含在内)的不同整数组成的数组。

1
2
3
4
5
6
7
8
示例 1:

输入:nums = [0,2,1,5,3,4]
输出:[0,1,2,4,5,3]
解释:数组 ans 构建如下:
ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
= [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]]
= [0,1,2,4,5,3]

有一种实现的思路很是巧妙,原地构建。
nums[i] 借助 进制的表示法 存储当前值 nums[i] 当前值, nums[nums[i]] 最终值
nums[i]=nums[i]+1000*(nums[nums[i]]%1000)

求排序数组中的众数。

示例如下:

1
2
3
4
5
示例1: nums=[1,1,2,2]
result=[1,2]

示例2: nums=[1,2,2];
result=[2]

实现思路如下: 借助三个变量,result=”存放总数”, base=”上一个数”,count,技术,最大的众数长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function getFrequentNumber(nums) {
let result = [];

let base,
count,
maxCount = 0;

const update = (number) => {
if (number != base) count = 1;
else count++;

if (count == maxCount) result.push(number);

if (count > maxCount) {
result = [number];
maxCount = count;
}
base = number;
};

for (let i = 0; i < nums.length; i++) {
update(nums[i]);
}

console.log(result);
}

getFrequentNumber([1, 1, 2, 2, 3, 3, 3]);
getFrequentNumber([1, 2, 3]);

数字字符串数组 转 数字

1
[4,5,9]=> ((4*10)+5)*10+9

http://example.com/算法与数据结构/巧妙的题/
作者
chen heng cheng
发布于
2024年5月30日
许可协议