leetcode、牛客網javascriptバージョン(更新中)
43741 ワード
var reverse = function(x) {
const res=(Math.abs(x)+'').split('').reverse().join('')*(x>0?1:-1);
return res<-Math.pow(2,31)||res>Math.pow(2,31)?0:res;
};
var lengthOfLongestSubstring = function(s) {
let result=[];
let now=0;
let arr=s.split('');
arr.forEach((value,index)=>{
let currentIndex=result.indexOf(value);
result.push(value)
result=result.slice(currentIndex+1);
if(now<result.length){
now=result.length;
}
})
return now;
};
var lengthOfLongestSubstring = function(s) {
let result=[];
let now=0;
let arr=s.split('');
arr.forEach((value,index)=>{
let currentIndex=result.indexOf(value);
result.push(value)
result=result.slice(currentIndex+1);
if(now<result.length){
now=result.length;
}
})
return now;
};
var plusOne = function (digits) {
digits[digits.length-1] += 1;
console.log(digits)
var i = digits.length-1;
while (true) {
if (digits[i] >= 10) {
digits[i] = 0;
if (digits[i-1] === undefined) {
//
digits.unshift(1);
break;
} else {
digits[i-1] += 1
}
i--
}
else {
break;
}
}
return digits
}
var myAtoi = function(str) {
return Math.max(Math.min(parseInt(str) || 0, 2147483647), -2147483648)
};
n個の整数を含む配列numsを与えて、numsには3つの要素a,b,cが存在するかどうかを判断し、a+b+c=0とする.すべての条件を満たし、重複しない三元グループを探し出す.注意:答えには重複した三元グループが含まれてはいけません.例えば、指定された配列nums=[-1,0,1,2,-1,-4]は、要求を満たす3つのタプルのセット:[-1,0,1],[-1,-1,2]]である./*
* 1、 for , , O(n^3)。 ?
2、 。O(nlogn)
3、 for , ( ), , while 。
4、 0 , head end 。
5、 0 , head end 。
6、 result。
* */
var threeSum = function(nums) {
let result=[];
let head;
let end;
let fixedVal;
nums.sort(function (a,b) {
return a-b;
})
// ,
if(nums[0]>0||nums[nums.length-1]<0||nums.length<3){
return result;
}
//
for(let i=0;i<nums.length;i++){
fixedVal=nums[i];
if(fixedVal === nums[i-1]) continue;
// nums[0], i+1
head=i+1;
//
end=nums.length-1;
//
while(head<end){
if(nums[head]+nums[end]+fixedVal==0){
let group=[];
group.push(nums[head],nums[end],fixedVal);
result.push(group);
// , ( )
head+=1;
end-=1;
// ,
while(head<end&&nums[head]==nums[head-1]){
head+=1;
}
// ,
while(head<end&&nums[end]==nums[end+1]){
end-=1;
}
}
else if(nums[head]+nums[end]+fixedVal<0){
head++;
}
else{
end--
}
}
}
return result;
}
順序配列と目標値を指定し、配列内で目標値を見つけ、インデックスを返します.ターゲット値が配列に存在しない場合は、順序で挿入される位置を返します.配列に重複要素がないと仮定できます.var searchInsert = function(nums, target) {
var index=nums.indexOf(target);
var currentIndex;
if(index!=-1){
return index;
}
else{
for(var i=0;i<nums.length;i++){
if(target<=nums[i]){
nums.splice(i,0,target);
currentIndex=i;
break;
}
else if(target>=nums[i]&&nums[i+1]>=target){
console.log(nums[i],nums[i+1])
nums.splice(i+1,0,target);
currentIndex=i+1;
break;
}
else if(target>=nums[nums.length-1]){
nums.push(target);
currentIndex=nums.length-1;
break;
}
}
}
return currentIndex;
};
負でない整数のセットを指定し、それらの順序を並べ直して最大の整数を構成させます.例1:入力:[10,2]出力:210例2:
入力:[3,30,34,5,9]出力:9534330は、出力結果が非常に大きい可能性があるので、整数ではなく文字列を返す必要があると説明しています.
var largestNumber = function(nums) {
nums.sort((a,b)=>{
return parseInt(`${b}${a}`)-parseInt(`${a}${b}`)
})
return nums.join('').replace(/^[0]+/,'0')
};
重複要素が与えられた整数配列があり、重複要素があるかどうかを判定します.任意の値が少なくとも2回配列にある場合、関数はtrueを返します.配列内の各要素が異なる場合、falseを返します.
例1:
入力:[1,2,3,1]出力:true例2:
入力:[1,2,3,4]出力:false例3:
入力:[1,1,1,3,4,3,2,4,2]出力:true
var containsDuplicate = function(nums) {
let arr=[...new Set(nums)];
return arr.length!=nums.length
};
Arayオブジェクトに重複項を除去する方法例1入力[false、true、undefined、null、NaN、0、1、{}、''a'、'、NaN]
出力[false,true,undefined,null,NaN,0,1,{},''a'
// 1
Array.prototype.uniq = function () {
var arr=[];
var flag=true;
for(var i=0;i<this.length;i++){
if(arr.indexOf(this[i])==-1){
if(this[i]!=this[i]){
if(flag){
arr.push(this[i])
flag=false;
}
}
else{
arr.push(this[i])
}
}
}
return arr;
}
// 2
Array.prototype.uniq = function () {
return [...new Set(this)];
}
2つのノードの最も近い共通の親ノードを検索し、ノード自体を含むことができる.function commonParentNode(oNode1, oNode2) {
if(oNode1.contains(oNode2)){
return oNode1;
}
else{
return commonParentNode(oNode1.parentNode,oNode2)
}
}
n個の整数を入力して、一番小さいK個の数を探します.例えば4,5,1,6,2,7,3,8という8つの数字を入力すると、最小の4つの数字は1,2,3,4です.function GetLeastNumbers_Solution(input, k)
{
// write code here
var result=input.sort(function(a,b){
return a-b;
})
return result.length>=k?result.slice(0,k):[]
}
HZはたまに専門の問題を持って、コンピュータ以外の専門の学生をだましに来ます.今日テストチームが終わった後、彼はまた話をしました.古い一次元モードの識別の中で、しばしば連続サブベクトルの最大和を計算しなければならないです.ベクトルが全部正数である時、問題はよく解決します.しかし、ベクトルに負数が含まれているなら、ある負の数を含むべきかどうか、隣の正数が補填されることを期待しています.例えば:{6、-3、-2,7、-15,1,2,2}、連続するサブベクトルの最大値は8である(0番目から3番目まで).配列をあげて、最大連続サブシーケンスの和を返します.彼に騙されませんか?(サブベクトルの長さは少なくとも1)function FindGreatestSumOfSubArray(array){
var max=array[0];
var thum=array[0];
for(var i=1;i<array.length;i++){
if(thum>0){
thum+=array[i]
}
else{
thum=array[i]
}
max=Math.max(thum,max)
}
return max
}