❤ leetCode简易题1-两数之和、简易2--回文数判断、简易14-最长公共前缀

❤ leetCode简易题1-两数之和、简易题14- 最长公共前缀

1、简易1-两数之和

① 题目要求

数字A + B = target,以target为求和结果,找出数组中符合的A、B数字下标。

第一次做的时候完全脑子一片蒙,随后认真看了看题目发现是发现找符合target和的两个数字下标

② 看了题解以后,第一次以双层for循环暴力破解题目【复杂度O(n²)】**

var twoSum = function (nums, target) {
    let datas = {};
    for (let i = 0; i < nums.length; i++) {
        for (let s = i + 1; s < nums.length; s++) {
            if (target==nums[i] + nums[s]) {
                return[i,s];
            }
        }
    }
};


var nums= [2,7,11,15];
var target = 9;
// twoSum([2,7,11,15],13); 
输出如下:
console.log(twoSum([2,7,11,15],13)); //2+11  [0,2]
console.log(twoSum([2,7,11,15],22)); //2+11  [1,3]

将判断条件进行改变以后【target-nums[i]== nums[s]】 代码进行了优化


  简单粗暴,2for循环逐个遍历判断
 
  var twoSum = function (nums, target) { l
 
  et datas = {};
 
  for (let i = 0; i < nums.length; i++)
 
    { for (let s = i + 1; s < nums.length; s++) {
 
       if (target-nums[i] == nums[s])
 
    { return[i,s];
 
  } } } };

③ 题解二

考虑到哈希表利用总和减去其中一个数判断另外一个数是否存在,存在:返回进去的数字下标和差值数字的下标;不存在,则记录当前减去数字的下标,方便函数下次继续判断和使用【复杂度O(n1)】**

isNaN(6) true


 var twoSum = function(nums, target) {
  var keys = {};
 
   for(var i = 0;i < nums.length; i++) {
 
     var diff = target - nums[i];
 
      // 判断差值diff在键值对中是否存在 是则找到匹配数字 数组第二个数字为7,下标为1
 
     // keys[diff]=7,i=2 
 
          if(!isNaN(keys[diff])) {
 
              // 返回减去的数字下标和差值数字的下标
 
              return [keys[diff], i];
 
         }
 
         // 未出现匹配值 将数字存入键值对中以备后续判断
        // 当前数字假设为第三个 nums[i]=7,keys[7]=1  i就是判断数字的下标  建立key值 方便下次使用
 
         // 若是7的差值不存在,当前数字7的下标就是1,将1记录为7的下标
 
         keys[nums[i]] = i;
    }
  };

2、简易2–回文数判断

① 题目要求判断回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

② 第一种解法-翻转字符串法

题解只有简单的一句

return x.toString()===x.toString().split('').reverse().join('');

理解代码

x.toString()
x为 123456就是 => 123456
x.toString().split(‘’) 就是数组 [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’]
reverse()函数颠倒就是 [‘6’, ‘5’, ‘4’, ‘3’, ‘2’, ‘1’]
再用join()函数转化为字符串 就是654321

作用:
—————————————————————————————————
toString()方法可以根据所传递的参数把数值转换为对应进制的数字字符串
例如:var a = 32;
console.log(a.toString(2)); //返回字符串100000
console.log(a.toString(4)); //返回字符串200
——————————————————————————————
split()把一个字符串分割成字符串数组
例如 【1】var str=“How are you doing today?”;
var n=str.split(" “); // 此处有空格
n输出的值:How,are,you,doing,today?
【2】把空字符串 (”“) 用作 separator,那么 stringObject 中的每个字符之间都会被分割
var str=“How are you doing today?”;
var n=str.split(”");
n输出的值:H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
——————————————————————————
join() 将数组元素转换为字符串
例如:【1】 ar fruits = [“Banana”, “Orange”, “Apple”, “Mango”];
var energy = fruits.join();
输出的值: Banana,Orange,Apple,Mango


【2】arr.join() // 返回的是⼀个字符串,如果数组为空则返回一个空字符串
var a = [‘a’, ‘b’, ‘c’];
var v1 = a.join(); // v1的值变为"a,b,c"
var v2= a.join(‘,’); // v2的值变为"a,b,c"
var v3 = a.join(‘+’); // v3的值变为"a+b+d"
var v4 = a.join(‘’); // v4的值变为"abc"


② 第二种解法-双指针遍历法

Math.floor()

返回小于或等于一个给定数字的最大整数

*/
如果我们测试的案例是121 
var isPalindrome = function(x) {
     var sel=x.toString();
     console.log(sel); //121
 var n=Math.floor(sel.length/2); // 1.5取整数为1 
 console.log(n); //输出1
 for(var i=0;i<n;i++){ 
     console.log(sel[i]);  // 121 的第一个位置下标为o的是1 
     console.log(sel.length-1-i);  // 长度3-1-0=2  i为0小于n为1时候,所以此处i为0 
     console.log(sel[sel.length-1-i]);  // 1 //sel[2]=1  // 0,1,2 //第三位为1   
       if(sel[i]!=sel[sel.length-1-i]) return false;
    }return true;
};

最后成功!

3、简易题14- 最长公共前缀

① 题目要求

题目如下:

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

官方给的实例:

示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"


示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

② 思路分析

分析:

取出最长公共前缀,那我们就可以直接拿第一个出来,然后转为数组,然后拿后面的每一个去跟这个第一项作比较,看里面的字符是否相同,如果后面的字符创长度比这个第一项还短,那就可以直接忽略不计。比这个长的话,游戏继续。

具体实现:
数组为空,返回’’
循环里面的字符串每个的长度 i
循环外层数组长度 s
判断flower 下的f是否和flow 下的f相同
相同=> 返回l拼接到第一个下面依次
不相同=> 返回原本的

③ 解题方法

方式一:

//
var longestCommonPrefix = function(strs) {
    if(strs.length==0){
          return ''   
      };
      var allstring = "";
      for (var s = 0; s < strs[0].length; s++) {
          var dataA = strs[0][s];
          for (var m = 1; m < strs.length; m++) {
              if ( s >= strs[m].length ||  strs[m][s] !== strs[0][s]) {
                  return allstring;
              }
              allstring +=  strs[0][s];
          }
      }
      return allstring
};

输出以后发现,虽然貌似没啥毛病,但是就是除了问题。
在这里插入图片描述

重新分析我们的逻辑可以发现

我依次使用了循环第一个数据字符串长度 ⇒ 整个数组的长度= > 当第一次能满足条件的时候,我把值塞进了allstring里面,但是这个时候返回的第一个字母l 实在我循环外层数组的时候(也就是重新循环了2次),所以返回的ll ,所以我的allstring 其实应该放到外层循环的外头即可,取循环第一次的其中相同的字符串即可。

完善我们的代码以后:

var strs = ["flower", "flow", "flight"],flower = ['f', 'l'];
      function strscommon(strs){
        if(strs.length==0){
         return ''   
        };
        var allstring = "";
        for (var s = 0; s < strs[0].length; s++) {
            var dataA = strs[0][s];
            for (var m = 1; m < strs.length; m++) {
                if ( s >= strs[m].length ||  strs[m][s] !== strs[0][s]) {
                    return allstring;
                }
            }
            allstring +=  strs[0][s];
        }
}
console.log(strscommon(strs),'strsall');

查看我们的输出结果:

fl strsall

解题完成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/489333.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue+Mysql的超市进销存系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

3.25C++

定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转 #include <iostream> #include <cstring> usi…

数据在内存的存储(2)【浮点数在内存的存储】

一.浮点数以什么形式存储在内存中 根据根据国际标准IEEE&#xff08;电气和电子工程协会&#xff09;754&#xff0c;任意一个二进制浮点数V都可以存储为这样的形式&#xff1a; V&#xff08;-1&#xff09;^S*M*2^E。 &#xff08;1&#xff09;&#xff08;-1&#xff09;^…

Unix环境高级编程-学习-08-自旋锁与屏障

目录 一、多线程相关文章链接 二、自由抒发 1、自旋锁 2、屏障 三、函数介绍 1、pthread_spin_init &#xff08;1&#xff09;声明 &#xff08;2&#xff09;作用 &#xff08;3&#xff09;参数 &#xff08;4&#xff09;返回值 &#xff08;5&#xff09;注意点 …

docker centos7安装jdk1.8(在线和离线方式)

目录 1.在线方式1.1.进入容器1.2.使用yum安装openjdk1.3.配置环境变量 2.离线方式2.1.下载jdk安装包2.2.解压2.3.配置环境变量 3.可能遇到的问题 1.在线方式 1.1.进入容器 1.2.使用yum安装openjdk # 安装JDK1.8 yum install java-1.8.0-openjdkjava -version1.3.配置环境变量…

RPA-财务对账邮件应用自动化(客户对账机器人)

《财务对账邮件应用自动化》&#xff0c;将会使用邮箱的SMTP服务&#xff0c;小北把资源包绑定在这篇博客了 Uibot (RPA设计软件)———机器人的小项目友友们可以参考小北的课前材料五博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff09; …

Netty学习——源码篇6 Pipeline设计原理 备份

1 Pipeline设计原理 在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应&#xff0c;它们的组成关系如下图&#xff1a; 通过上图可以看到&#xff0c;一个Channel包含了一个ChannelPipeline&#xff0c;而ChannelPipeline中又维护了一个由ChannelHandlerContext组成的…

零基础学python之高级编程(6)---Python中进程的Queue 和进程锁,以及进程池的创建 (包含详细注释代码)

Python中进程的Queue 和进程锁,以及进程池的创建 文章目录 Python中进程的Queue 和进程锁,以及进程池的创建前言一、进程间同步通信(Queue)二、进程锁&#xff08;Lock&#xff09;三、创建进程池Poorpool 类方法: End! 前言 大家好,上一篇文章,我们初步接触了进程的概念及其应…

【随笔】Git -- 常用命令(四)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

第16篇:奇偶校验器

Q&#xff1a;本期我们将实现4位奇偶校验逻辑电路&#xff0c;即校验4位二进制代码中 “1” 的个数是奇数或偶数。 A&#xff1a;奇偶校验器的基本原理&#xff1a;采用异或运算对“1”的奇偶个数进行校验&#xff0c;从最高位依次往最低位进行连续异或运算。如果最后的异或运…

stm32控制电机--计算电角度以及电角度和机械角度的对应关系---以及foc的控制算法模型及过程(推荐)

1&#xff0c;电角度和机械角度的关系 如何区分电角度和机械角度&#xff1f; 2&#xff0c;foc模型工程&#xff08;推荐&#xff09; SimpleFOC移植STM32&#xff08;四&#xff09;—— 闭环控制 注意速度需要进行低通滤波

使用Docker Compose一键部署前后端分离项目(图文保姆级教程)

一、安装Docker和docker Compose 1.Docker安装 //下载containerd.io包 yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm //安装依赖项 yum install -y yum-utils device-mapper-persistent-data l…

消费电子回暖之际,手机回收厂商如何持续释放“绿色潜力”?

春天到来的暖意&#xff0c;正在消费电子产业链上下游蔓延。 仅就手机这一品类而言&#xff0c;可以看到&#xff0c;2023年手机厂商已经度过寒冬&#xff0c;中国信息通信研究院发布的数据显示&#xff0c;2023年1-12月&#xff0c;我国手机总体出货量累计2.89亿部&#xff0…

新生儿奶瓶怎么选择?5款口碑榜单奶瓶推荐

新生儿奶瓶是每个新手爸妈都要选择的喂养产品&#xff0c;除了喂养宝宝外&#xff0c;还能帮助宝宝渡过戒奶期。然而近年来&#xff0c;市面上出现一些低质量、劣质材料制成的奶瓶&#xff0c;频频被爆安全隐患&#xff0c;给消费者带来极大的不便和风险。那么你知道什么牌子的…

Linux的学习之路:1、发展史与编译环境的搭建

一、发展史 1991年10月5日&#xff0c;赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组 &#xff08;comp.os.minix&#xff09;中宣布他编制出了一种类似UNIX的小操作系统&#xff0c;叫Linux。新的操作系统是受到另一个UNIX的小操作系统——Minix的启发…

Cisco firepower 2140 run ASA and config failover

1 背景 here we got 2 cisco firepower 2140 hardware appliance we’re planning to run ASA on it. and config failover for Primary Unit and Secondary Unit 现场2台Cisco firepower 2140防火墙&#xff0c; 运行ASA模式&#xff0c; 双机组HA&#xff0c;心跳线使用E1/1…

服务器基础知识(物理服务器云服务器)

今天我们来介绍一下服务器的基础知识 一、服务器硬件基础知识 组件说明中央处理器&#xff08;CPU&#xff09;CPU是服务器的大脑&#xff0c;负责执行计算任务和指令。服务器通常配备多个CPU核心&#xff0c;以支持并行处理和提高性能。关键的CPU性能指标包括时钟频率、核心数…

sonarqube使用指北(三)-编写代码进行自动化扫描

一、引言 上一篇文章之后 我们应该已经成功完成的配置了扫描环境并执行了一次基本的本地扫描,但是之前的手动扫描需要我们每一次都手动切换到代码目标并手动执行扫描命令,效率很低。在代码库较大的情况下会占用大量的时间。这一章我们会通过编写python代码的形式来实现自动化…

Python学习:循环语句

Python循环语句 概念 循环语句是编程中常用的结构&#xff0c;用于多次执行相同或类似的代码块。Python中有两种主要的循环语句&#xff1a;for循环和while循环。 for循环&#xff1a; for循环用于遍历一个序列&#xff08;如列表、元组、字符串等&#xff09;中的元素&#x…
最新文章