freeCodeCamp/guide/chinese/certifications/javascript-algorithms-and-d.../basic-algorithm-scripting/where-do-i-belong/index.md

9.2 KiB
Raw Blame History

title localeTitle
Where Do I Belong 我属于哪里?

:triangular_flag_on_post:如果卡住,请记得使用**Read-Search-Ask** 。尝试配对程序:busts_in_silhouette:并编写自己的代码:pencil:

:checkered_flag:问题说明:

这可能是一个难以理解的问题。您需要在数组中找到按顺序插入数字的位置,并返回应该去的索引。

相关链接

:speech_balloon:提示1

首先要做的是将数组从低到大排序,只是为了使代码更容易。这是排序的地方,它需要一个回调函数,所以你必须创建它。

现在尝试解决问题

:speech_balloon:提示2

对数组进行排序后,只需检查第一个更大的数字并返回索引。

现在尝试解决问题

:speech_balloon:提示3

如果该数字没有索引,那么您也必须处理该案例。

现在尝试解决问题

扰流警报!

警告牌

提前解决!

:beginner:基本代码解决方案

function getIndexToIns(arr, num) { 
  arr.sort(function(a, b) { 
    return a - b; 
  }); 
 
  for (var a = 0; a < arr.length; a++) { 
    if (arr[a] >= num) 
      return a; 
  } 
 
  return arr.length; 
 } 

:rocket: 运行代码

代码说明:

  • 首先,我使用.sort(callbackFuntion)对数组进行排序,从左到右按最低到最高排序。
  • 然后我使用for循环来比较从最小的一个开始的数组中的项目。当数组上的项大于我们要比较的数时我们将索引作为整数返回。

相关链接

:beginner:基本代码解决方案

function getIndexToIns(arr, num) { 
  // Find my place in this sorted array. 
  var times = arr.length; // runs the for loop once for each thing in the array 
  var count = 0; 
  for (var i=0;i<times;i++){ 
    if(num>arr[i]){count++;} } // counts how many array numbers are smaller than num 
    return count; // the above equals num's position in a sorted array 
 } 
 
 getIndexToIns([40, 60], 50); 

:rocket: 运行代码

代码说明:

  • 我没有对arr输入数组进行排序
  • 每当num输入大于arr输入数时我都会运行for循环计数。
  • 这个数字相当于num在排序数组中的位置。

:beginner:基本代码解决方案

@HarinaPana

function getIndexToIns(arr, num) { 
 
  arr.sort(function(a, b) { 
  return a - b; 
  }); 
 
  var i = 0; 
  while (num > arr[i]) { 
  i++; 
  } 
 
  return i; 
 } 
 
 getIndexToIns([40, 60], 50); 

:rocket: 运行代码

代码说明:

  • 排序现有数组。
  • 在检查_num_是否更大时迭代数组。
  • 当_num_不大于_i_并且返回最后检查的元素时循环将停止。

:sunflower:中级代码解决方案:

通过@faustodc

function getIndexToIns(arr, num) { 
  arr.push(num); 
  arr.sort(function(a, b){return ab}); 
  return arr.indexOf(num); 
 } 

:rocket: 运行代码

代码说明:

  • 首先,我们使用push()将数字num添加到数组中, push()其添加为数组的最后一个元素。
  • 然后我们使用sort()和回调函数function(a, b){return ab}来按升序对数字进行排序。
  • 最后,我们使用indexOf()函数indexOf()数组中num的位置或索引。

相关链接

:sunflower:中级代码解决方案:

使用.findIndex()

function getIndexToIns(arr, num) { 
  // sort and find right index 
  var index = arr.sort((curr, next) => curr > next) 
    .findIndex((currNum)=> num <= currNum); 
  // Returns proper answer 
  return index === -1 ? arr.length : index; 
 } 
 
 getIndexToIns([40, 60], 500); 

:rocket: 运行代码

代码说明:

  • 首先按升序对数组进行排序,目前使用数组函数完成此操作以实现最小占用空间。
  • 一旦数组被排序,我们直接应用.findIndex() ,我们将比较数组中的每个元素,直到我们找到num <= currNum这意味着我们要插入的数字小于或等于当前数字迭代中的数字。
  • 然后我们使用三元运算来检查我们是否返回了索引或-1 。我们只有在找不到索引时才得到-1 这意味着当我们为数组中的所有元素得到一个false时对于这种情况这意味着num应该插入到列表的末尾,这样我们为什么要使用arr.length

相关链接

:rotating_light:高级代码解决方案

通过@nivrith

function getIndexToIns(arr, num) { 
 
 return arr.concat(num).sort((a,b) => ab).indexOf(num); 
 
 } 
 
 getIndexToIns([1,3,4],2); 

:rocket: 运行代码

代码说明:

  • 我们使用方法链来一个接一个地调用一个方法来解决单行中的问题。首先我们通过调用arr.concatnum方法合并arrnum
  • 然后我们使用带有回调箭头函数的 sort() (a, b) => return ab来按升序对数字进行排序
  • 最后,我们使用indexOf()方法indexOf()数组中num的位置或索引

相关链接

:clipboard:捐款说明:

  • :warning: 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
  • 添加解决方案的说明。
  • 将解决方案分为以下类别之一 - 基本 中级高级:traffic_light:
  • 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 :warning: 不要 删除任何现有的用户名

看到:point_right: Wiki Challenge Solution Template供参考。