「LeetCode」JavaScript-分而治之⚡️

简介: 「LeetCode」JavaScript-分而治之⚡️

image.png

大家好,我是速冻鱼🐟,一条水系前端💦,喜欢花里胡哨💐,持续沙雕🌲,是隔壁寒草🌿的好兄弟。


欢迎小伙伴们加我微信:sudongyuer拉你进群,一起讨论,期待与大家共同成长🥂。


前言🌧️



算法,对前端人来说陌生又熟悉,很多时候我们都不会像后端工程师一样重视这项能力。但事实上,算法对每一个程序员来说,都有着不可撼动的地位。

因为开发的过程就是把实际问题转换成计算机可识别的指令,也就是《数据结构》里说的,「设计出数据结构,在施加以算法就行了」。


当然,学习也是有侧重点的,作为前端我们不需要像后端开发一样对算法全盘掌握,有些比较偏、不实用的类型和解法,只要稍做了解即可。


分而治之是什么? 😊



  • 分而治之是算法设计中的一种方法
  • 它将一个问题成多个和原问题相似的小问题,递归解决小问题,再将结果并以解决原来的问题。


场景一:归并排序 🍃



  • 分:把数组从中间一分为二。
  • 解:递归地对两个子数组进行归并排序。
  • 合:合并有序子数组


场景二:快速排序 🍃



  • 分:选基准,按基准把数组分成两个子数组。
  • 解:递归地对两个子数组进行快速排序。
  • 合: 对两个子数组进行合并。


猜数字大小-分而治之🦀



题目


374. 猜数字大小


难度简单

猜数字游戏的规则如下:


  • 每轮游戏,我都会从 1n 随机选择一个数字。 请你猜选出的是哪个数字。
  • 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。

你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-110):


  • -1:我选出的数字比你猜的数字小 pick < num
  • 1:我选出的数字比你猜的数字大 pick > num
  • 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num

返回我选出的数字。


示例 1:


输入:n = 10, pick = 6
输出:6

示例 2:

输入:n = 1, pick = 1
输出:1

示例 3:

输入:n = 2, pick = 1
输出:1

示例 4:


输入:n = 2, pick = 2
输出:2

提示:


  • 1 <= n <= 231 - 1
  • 1 <= pick <= n


解题思路


  • 二分搜索,同样具备“分、解、合”的特性。
  • 考虑选择分而治之思想

解题步骤


分:计算中间元素,分割数组。

解:递归地在较大或者较小子数组进行二分搜索。

合: 不需要此步,因为在子数组中搜到就返回了。


源码


/** 
 * Forward declaration of guess API.
 * @param {number} num   your guess
 * @return              -1 if num is lower than the guess number
 *                   1 if num is higher than the guess number
 *                       otherwise return 0
 * var guess = function(num) {}
 */
/**
 * @param {number} n
 * @return {number}
 */
var guessNumber = function(n) {
   const rec=(low,higher)=>{
        if(low>=higher){
           return low
       }
       const mid=Math.floor((low+higher)/2)
       if(guess(mid)===0){
           return mid
       }
       else if(guess(mid)===1){
           return rec(mid+1,higher)
       }
       else if(guess(mid)===-1){
           return rec(low,mid-1)
       }
   }
   return rec(1,n)
};


结束语🌞


image.png


那么鱼鱼的LeetCode算法篇的「LeetCode」JavaScript-分而治之⚡️就结束了,算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾,欢迎加我好友,一起沙雕,一起进步

相关文章
|
机器学习/深度学习 JavaScript 前端开发
LeetCode 51.N皇后(JavaScript 解题)
LeetCode 51.N皇后(JavaScript 解题)
59 0
|
5月前
|
存储 JavaScript 前端开发
【经典算法】LeetCode350:两个数组的交集 II(Java/C/Python3/JavaScript实现含注释说明,Easy)
【经典算法】LeetCode350:两个数组的交集 II(Java/C/Python3/JavaScript实现含注释说明,Easy)
29 1
|
JavaScript 前端开发
leetcode 1418.点菜展示表(JavaScript)
leetcode 1418.点菜展示表(JavaScript)
42 0
|
JavaScript 前端开发 算法
LeetCode 37.解数独(注释完整+JavaScript解题)
LeetCode 37.解数独(注释完整+JavaScript解题)
77 0
|
JavaScript 前端开发
【LeetCode】JavaScript题解:电话号码的字母组合|组合总和Ⅲ
【LeetCode】JavaScript题解:电话号码的字母组合|组合总和Ⅲ
|
JavaScript 前端开发
【LeetCode】JavaScript题解:电话号码的字母组合|组合总和Ⅲ
【LeetCode】JavaScript题解:电话号码的字母组合|组合总和Ⅲ
|
设计模式 JavaScript 前端开发
|
算法 JavaScript 前端开发
LeetCode 5.最长回文子串【JavaScript 5种思路实现】
LeetCode 5.最长回文子串【JavaScript 5种思路实现】
184 0
|
JavaScript 前端开发 索引
leetcode.328奇偶链表——Javascript实现方案
leetcode.328奇偶链表——Javascript实现方案
81 0
|
存储 JavaScript 前端开发
使用JavaScript解决LeetCode分割数组的问题
使用JavaScript解决LeetCode分割数组的问题
132 0
使用JavaScript解决LeetCode分割数组的问题