4Manuals

  • PDF Cloud HOME

Scala-如何修改通过引用传递给方法的输入数组? Download

    如何删除外部索引并合并内部json 如何在Swift中将数组的每个元素与下一个数组的每个元素相乘? 字符串数组在for循环中初始化时忽略索引0 通过键合并两个数组,并将值附加到另一个数组中 在Perl中将哈希转换为哈希数组 将Google表格显示为HTML表格 阵列超出范围MQL5循环 C ++中数组,向量和矩阵之间的区别? 我想在以下javascript数组内的details obj中添加一个名为Averagetimespent的新变量。有人可以帮我这个忙吗? javascript:较大一侧数组中最接近的数字

问题陈述

我将尝试通过一个场景来详细说明该案例。让我们以这个问题为例。

链接到问题:https://leetcode.com/problems/remove-element/

  

给出一个数组nums和一个值target,删除所有的实例   该值就位并返回新长度。

     

不要为另一个数组分配额外的空间,必须通过使用O(1)额外的内存就地修改输入数组来做到这一点。

     

示例:给定nums = [0,1,2,2,3,0,4,2],target = 2; output = 5(不等于目标的元素数)并将数组修改为   [0,1,3,0,4]

     

可以更改元素的顺序。离开什么都没关系   超出了新的长度。

我的方法

第1步:确定所有与给定目标相等的元素,并将它们移到数组的右侧,同时保持一个计数器。

第2步:从右侧删除所有元素。

步骤3:return (n - counter),其中n是数组长度,而counter是等于目标的元素数。

以下是相同的实现:

object RemoveElement {
  // Link to question: https://leetcode.com/problems/remove-element/
  def main(args: Array[String]): Unit = {
    var nums = Array(3,2,2,3)
    val target = 3
    val result = removeElement(nums, target)
    // nums = nums.dropRight(_.equals(target)) // POINT 1
    println(s"Result: ${result}, Modified Array: [${nums.mkString(", ")}]")
  }

  def removeElement(nums: Array[Int], target: Int): Int = {
    val n = nums.length
    var left, counter = 0
    var right = n - 1

    while(left < right){
      if(nums(left) != target){
        left += 1
      }
      else {
        // Find position of the elements which is not equal to target
        if(nums(right) == target){
          counter += 1
          right -= 1
        }
        else{
          // Swap the elements
          counter += 1
          val temp = nums(left)
          nums(left) = nums(right)
          nums(right) = temp
          left += 1
          right -= 1
        }
      } 
    }
    // nums.dropWhile(_.equals(target))  // POINT 2
    // nums = nums.dropRight(_.equals(target))  // POINT 3
    return (n - counter)
  }
}

要点-1:绝对有意义,因为数组nums在main方法的范围内,因此,该语句将用作魅力。

要点-2:这些行对数组nums没有影响。

要点-3:给出错误。我了解输入参数(数组nums)的类型为val(即通过引用传递,因此在方法removeElement的范围内是不变的)。

如果我可以选择创建一个新数组,则不会有任何问题。但是,如果需要通过在调用方法中添加/删除元素(如在此问题中)来返回修改后的数组,该如何在Scala中实现呢?

要使情况更通用,我们可以在Scala方法中修改输入集合(作为参数传递)的方式是什么?

附言::如果我没有从输入数组中删除元素,LeetCode将失败,并显示以下消息:

enter image description here

1 个答案:

答案 0 :(得分:0)

  

如何修改通过引用传递给方法的输入数组?

Scala不支持传递引用。默认值为按值传递(或更确切地说,按值传递的特殊情况,有时称为按对象调用,按共享调用或按对象共享调用)。 Scala还支持按名称呼叫。

因此,您只能不能在Scala中通过引用将数组传递给方法。您将不得不使用另一种支持传递引用的语言,例如C#(带有ref关键字)或C ++。 (请注意,Java也不支持引用传递。)



Similar searches
    如何在聚焦模态窗口上获得“心跳”效果? 编译到Wear OS手表时出现致命错误 发送用户上传的附件文件以发送到电子邮件地址帐户 显示较少的筹码比对 Samsung RSG5F Refrigerator User Manual