巧妙的题
相同类型的题目
借助高低位,原地解决问题的一种算法思路,目前还没有研究透测。已经看到两次了。
迭代法,同步遍历,非常牛逼的一个思路.
原地构建
给你一个 从 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 = 输出: 解释:数组 ans 构建如下: ans = = =
|
有一种实现的思路很是巧妙,原地构建。
nums[i] 借助 进制的表示法 存储当前值 nums[i] 当前值, nums[nums[i]] 最终值
nums[i]=nums[i]+1000*(nums[nums[i]]%1000)
求排序数组中的众数。
示例如下:
1 2 3 4 5
| 示例1: nums= result=
示例2: nums=; result=
|
实现思路如下: 借助三个变量,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
|