首页 > 编程语言 >程序员面试金典---16

程序员面试金典---16

时间:2023-04-26 22:58:26浏览次数:57  
标签:arr hash temp 16 金典 --- item let left

变为词组

思路:

哈希模拟

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
	// {'aet':["ate","eat","tea"]}
    let hash = new Map()
    // 循环
    for(let item of strs){
        // 字符串排序
        const temp = item.split('').sort().join('')
        // 如果有了
        if(hash.has(temp)){
            // 把这个往value里面push
            hash.get(temp).push(item)
        }else{
        	// 没有就设置这个
            hash.set(temp, [item])
        }
    }
    // 返回value,需要解构
    return [...hash.values()]
};

搜索旋转数组

思路:

  • 分两段递增
  • 两段上二分搜索
  • 先左后右,为了最小索引
var search = function(arr, target) {

    // 二分搜索写成模板方便调用,查找左边界的二分搜索
    var biSearch = function(left, right){
        while(left <= right){
            let mid = left + ((right - left)>>1);
            if(arr[mid] >= target){
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return arr[left]===target? left : -1;
    }

    // 找到中间的断点区分两段
    let point = 0
    for(let i = 0; i < arr.length-1;i++){
        if(arr[i] <= arr[i+1]){
            point++;
        } else break;
    }
    // 左边进行二分搜索
    let leftRes = biSearch(0, point);
    if(leftRes!== -1) return leftRes; // 左边找到了就返回
    else { // 左边没找到就找右边
        let rightRes = biSearch(point+1, arr.length -1)
        return rightRes;
    }

}

标签:arr,hash,temp,16,金典,---,item,let,left
From: https://www.cnblogs.com/dgqp/p/17357633.html

相关文章

  • IntelliJ Idea设置text file encoding UTF-8;换行符为 Unix 格式
    设置textfileencodingUTF-8Transparentnative-to-asciiconversion这个功能会将我们输入的所有字符转换成Unicode序列码保存,避免properties的乱码问题。CreateUTF-8files选择withNOBOMUTF-8BOM又叫UTF-8签名。BOM,byteordermark。UTF-8的BOM在文件头部,用来标识......
  • 使用eclipsefdn/hugo-node容器构建hugo静态站点
    eclipsefdn/hugo-node容器是一个基于Node.js和Hugo的Docker容器,用于构建和部署静态网站。它包含了Hugo和Node.js的环境,可以方便地进行网站的开发、构建和部署。使用eclipsefdn/hugo-node容器可以简化网站开发和部署的流程,具体步骤如下:安装Docker在使用eclipsefdn/hugo-node容......
  • CF1699A The Third Three Number Problem
    题意简述构造出一个三元组a,b,c使得(a⊕b)+(a⊕c)+(b⊕c)=n,若无解输出-1。符号⊕的意思为异或个人分析首先要了解异或符号的性质:1,x⊕0=x2,x⊕x=x根据异或符号的性质可以得到一下构造:a=b=0,c=n/2c=0,a=b=n/2通过上述可以发现答案都是偶数所以若n为奇则无解......
  • 王者荣耀英雄张良技能单词学习---continuous,intercept,battery,suppress 这四个单词
    刚刚用张良拿了首胜言灵·咒令(被动技能)被动:张良对任一敌人造成的相邻两次普攻或技能伤害的时间间隔若小于1.5秒,这两次伤害的间隔时间被视为“连续攻击状态”,该状态每积累满1.2秒,会使该敌人额外承受140(+50%法术加成)点真实伤害,该伤害随英雄等级每级成长10点。这个技能重点是连续,只......
  • #yyds干货盘点# LeetCode程序员面试金典:解数独
    题目:编写一个程序,通过填充空格来解决数独问题。数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 '.' 表示。 示例1......
  • go:函数高级、包的使用、if-else、循环、switch、数组
    目录一、函数高级二、包的使用三、if-else四、循环五、switch六、数组七、作业python实现链表一、函数高级1、函数的参数和返回值都是类型的一部分,函数可以赋值给一个变量,有两种情况:test3函数,接收一个参,参数是函数类型:没有参数没有返回值test3有返回值,返回值是个函数:函数......
  • 05-1 液体燃料燃烧:雾化原理与技术
    控制雾化的两个准则数:韦伯数和奥内佐格数这两个准则数可以刻画液滴破碎程度,韦伯数越大,液滴破碎可能性会增加。雾化过程和机理强化液体燃料雾化的主要方法有:提高液体燃料的喷射压力,喷射压力越高(喷射速度越大),雾化得越细。降低液体燃料的粘度与表面张力,如提高燃油的温度可降......
  • AtCoder Regular Contest 123 C 1, 2, 3 - Decomposition
    洛谷传送门AtCoder传送门从低位往高位考虑。设当前个位为\(k\),暴力搜索这一位向上进\(i\)位,设\(\left\lfloor\frac{n}{10}\right\rfloor-i\)的答案为\(t\)。若\(t>10i+k\)显然就不可行,因为就算个位全部填\(1\)也不能补齐;否则\(n\)的答案就是\(\max(t,\l......
  • vulfocus初探01--搭个玩玩
    vulfocus初探01--搭个玩玩0X10搭建环境平台:debian1164位docker0X20vulfocus介绍vulfocus是一个基于docker的漏洞模拟平台,完全开源,网址GitHub-fofapro/vulfocus:......
  • FileBuffer-ImageBuffer代码实现
    #include"stdafx.h"#include<stdio.h>#include<windows.h>#include<malloc.h>////FileBuffer函数DWORDReadPEFile(LPVOID*ppFileBuffer){FILE*pFile=NULL;DWORDSizeFileBuffer=0;pFile=fopen("C://WINDOWS//system......