leetcode、牛客網javascriptバージョン(更新中)

43741 ワード

  • は、32ビットの符号付き整数を与え、この整数の各々の数字を反転させる必要がある.(私たちの環境は32ビットの符号付き整数しか記憶できないと仮定すると、その値の範囲は[−231,231−1]です.この仮定に従って、反転した整数がオーバーフローしたら0に戻ります.)
  • 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;
    };
    
  • 与えられた文字列のうち、重複文字を含まない最長子列の長さを探してください.例1:入力:「abcabcbb」出力:3は、重複文字がない最長子列が「abc」であるため、その長さは3と解釈する.例2:入力:「b bbbbb」出力:1は、重複文字がない最長子列が「b」であるため、その長さは1であると解釈する.例3:入力:「pwkew」出力:3は、重複文字がない最長子列が「wke」であるため、その長さは3と解釈する.注意してください.答えは串刺しの長さでなければなりません.「pwke」はサブシーケンスで、サブストリングではありません.
  • 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;
    };
    
  • は、整数からなる非空行列によって表される非負の整数を与え、その数に基づいて1つを加算する.最も上位の数字は配列の最初の位置にあり、配列の各要素は一つの数字だけを記憶しています.整数0以外はゼロで始まることはないと仮定してもいいです.例1:入力:[1,2,3]出力:[1,2,4]説明:入力配列は数字123を表します.例2:入力:[4,3,2,1]出力:[4,3,2,2]解釈:入力配列は数字4321を表します.
  • 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
      }
    
  • 文字列変換整数(atoo)は、文字列を整数に変換することができるように、atoi関数を実現してください.まず、この関数は必要に応じて最初の空白文字が見つかるまで、無駄な先頭スペース文字を破棄します.私たちが探している最初の非空の文字が正か負の文字である場合、この記号は後の面にできるだけ多くの連続した数字と組み合わせて、この整数の正負の番号とします.最初の非空文字が数字である場合は、そのまま後から続く数字文字と組み合わせて整数を作ります.この文字列は有効な整数部分以外にも、関数に影響を与えるべきではない文字を無視することができます.この文字列の最初の非スペース文字が有効な整数文字ではなく、文字列が空または文字列に空白文字のみが含まれている場合、あなたの関数は変換する必要がありません.いずれの場合も、関数が有効に変換されない場合は、0を返します.
  • 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
    }