LeetCode 136单号 给定一个整数数组,除了一个元素外,每个元素都会出现两次。找到那一个。
我通过在JS中使用Object-property作为Hash解决了这个问题。 但是,该属性仅允许字符串类型,因此所有数据都会自动转换为字符串。
var singleNumber = function(nums) {
var hash = {}
for(var i=0;i<nums.length;i++)
if (hash.hasOwnProperty(nums[i]))
delete hash[nums[i]]
else
hash[nums[i]] = 1
for(var x in hash)
return Number(x) }
如何在处理后获得原始数据类型?在这个问题中,我使用Number()进行转换。
但是,如果此问题中的数组不仅包含数字,还包含字符串。 [&#39; 123&#39;,123,...]可能会因上述解决方案而失败。
答案 0 :(得分:1)
它可以轻松完成,只需存储对象而不是1
https://jsfiddle.net/uo8v55qf/1/
var singleNumber = function(nums) {
var hash = {}
for(var i=0;i<nums.length;i++)
if (hash.hasOwnProperty(nums[i]))
delete hash[nums[i]]
else
hash[nums[i]] = { value:nums[i], type: typeof nums[i]};
for(var x in hash)
return hash[x];
}
result = singleNumber(['123',123,'23']);
console.log(result);
console.log(result.value + ' type:' + result.type); //23 type:string
result = singleNumber(['123',123,23]);
console.log(result.value + ' type:' + result.type); //23 type:number
答案 1 :(得分:0)
此解决方案仅适用于整数。 (或可以解析为整数的字符串)
var array = ['12', 12, 4, 33, 9, '33', 9]; // 4 is the element you search for
var hash = {};
array.forEach(function(number) {
number = parseInt(number);
// if the number doesn't exists initialize the hash entry with 1 otherwise add 1
hash[number] = hash[number] ? 1 : ++hash[number];
});
for (var key in hash) {
if (hash[key] === 1) console.log('Element ' + key + ' appears once');
}