查找数组中唯一的一个数字,scala版本

本文提供了一种解决方案来找出数组中仅出现一次的元素,该元素在其他所有元素都出现两次的情况下独树一帜。通过使用Scala编程语言实现了一个函数,该函数能够过滤并找到这个独特的元素,同时满足线性时间复杂度的要求。
/*Given an array of integers, every element appears twice except for one. Find that single one.

Note:
 Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 
*/

object SingleNumber {
  
  def findSingle(arr: Array[Int]):Int = {
    arr.toBuffer.filter(n => !((arr.toBuffer-=n) contains n))(0)   
  }                                               //> findSingle: (arr: Array[Int])Int
                                                  //> arr  : Array[Int] = Array(2, 2, 3, 3, 4, 4, 5, 5, 7, 7, 8, 8, 9, 9, 1)
  val arr = Array(2,2,3,3,4,4,5,5,7,7,8,8,9,9,1)

	val m = findSingle(arr)                   //> m  : Int = 1
}


 

不知道符不符合空间要求,但时间应该符合了哈
### 实现从给定数组中筛选出所有水仙花数 为了实现在给定数组中找到所有的水仙花数的功能,可以定义一个函数来检查单个数字是否为水仙花数,并利用此函数遍历整个数组。下面是一个具体的实现方案: ```scala object NarcissisticNumbersFinder { // 定义一个方法用于检测某个三位数是不是水仙花数 def isNarcissisticNumber(num: Int): Boolean = { if (num >= 100 && num <= 999) { val a = num / 100 // 获取百位上的数值 val b = (num / 10) % 10 // 获取十位上的数值 val c = num % 10 // 获取个位上的数值 // 判断三个位置上数字的立方和是否等于原数 a * a * a + b * b * b + c * c * c == num } else false // 如果不是三位数则返回false } // 定义一个方法接收一个整型数组作为参数,返回一个新的只含有水仙花数的列表 def findNarcissisticNumbersInArray(numbers: Array[Int]): List[Int] = { numbers.filter(isNarcissisticNumber).toList } def main(args: Array[String]): Unit = { // 测试数据 val testData = Array(153, 278, 370, 407, 567) // 调用findNarcissisticNumbersInArray获取测试数据中的水仙花数 val result = findNarcissisticNumbersInArray(testData) // 打印结果 println(s"Found narcissistic numbers are $result") } } ``` 上述代码首先创建了一个名为`isNarcissisticNumber`的方法用来验证传入的整数是否属于水仙花数[^1]。接着实现了另一个叫作`findNarcissisticNumbersInArray`的方法,它接受一个整型数组作为输入参数,并通过调用前面提到的辅助方法过滤掉非水仙花数,最终返回仅包含符合条件项的新列表。 最后,在`main`函数里提供了一组测试数据来进行功能演示,展示了如何使用这两个自定义的方法来查找指定范围内的水仙花数[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值