移除数组中第一个负数后的所有负数

scala> val a = ArrayBuffer[Int](1, 2,3, 5, -1, 2, -3, -5)
a: scala.collection.mutable.ArrayBuffer[Int]= ArrayBuffer(1, 2, 3, 5, -1, 2, -3
, -5)
 
scala> :paste
// Entering paste mode (ctrl-D tofinish)
 
var foundFirstNegative = false
val keepIndexes = for (i <- 0 untila.length if !foundFirstNegative || a(i) > 0) # 说明1
yield {
if (a(i) < 0) foundFirstNegative =true; i # 说明2
}
for (i <- 0 until keepIndexes.length)a(i) = a(keepIndexes(i)) # 说明3
a.trimEnd(a.length - keepIndexes.length)# 说明4
 
// Exiting paste mode, now interpreting.
 
foundFirstNegative: Boolean = true
keepIndexes:scala.collection.immutable.IndexedSeq[Int] = Vector(0, 1, 2, 3, 4,
5)
scala> a
res4:scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 5, -1, 2)

算法说明:避免传统多次移动数组,多次remove,上述代码设计优点在于统一找出不满足条件的元素index,然后统一删除这些元素。

说明1:第一个负数和所有正数都会通过if守卫;

说明2:第一个负数通过if守卫,进入说明2代码,将foundFirstNegative置为true,后续的负数则通不过if守卫部分,且i和if是独立的,并未使用块包围;

说明3:将a中前keepIndexes.length个元素置为对应的整数和第一个负数;

说明4:删掉a中keepIndexes.length – 1位置后面的元素,剩下的即为所求元素。

时间: 2024-12-26 14:30:39

移除数组中第一个负数后的所有负数的相关文章

scala移除一个数组中第一个负数后的所有负数

2016 年1月1日 王老师课堂笔记和作业 笔记:王老师主要讲解了spark的发展前景,spark在未来的几十年里必将一统大数据江湖.graphx,mllib,sparkSQL (1)scala语法的基础知识,重点为函数式编程思想. (2)spark源代码查看. 作业描述: 移除一个数组中第一个负数后的所有负数 object Except { def main(args: Array[String]) { val arr = Array(0,2,-3,1,2,3,-3,-6,-7); var f

scala 除去数组中第一个负数以外的所有负数

package com.tydic.test /** * 除去数组中第一个负数以外的所有负数 */ object Test2 { def main(args: Array[String]): Unit = { val arr = Array(1, 2, 0, 3, 4, -1, -2, -3 ,0) var flag = 1 var index = 0 arr.map {e => if(flag > 0 ){ if(e >= 0){ index += 1 }else{ flag = -1

Leetcode27---&gt;Remove Element(移除数组中给定元素)

题目:给定一个数组array和一个值value,移除掉数组中所有与value值相等的元素,返回新的数组的长度:要求:不能分配额外的数组空间,且必须使用原地排序的思想,空间复杂度O(1); 举例: Given input array nums = [3,2,2,3], val = 3 Your function should return length = 2, with the first two elements of nums being 2. 解题思路: 1.  首先找到第一个等于valu

js如何移除数组中指定索引的项

js如何移除数组中指定索引的项:在Array对象中有给定的函数可以删除数组中指定的元素,虽然非常好用,但是总感觉看不到摸不着的比较别扭,下面就分享一个自定义的删除数组指定索引值元素的函数,希望给大家一个全新的思路.代码实例如下: var array=[]; array[0]="蚂蚁部落一"; array[1]="蚂蚁部落二"; array[2]="蚂蚁部落三"; array[3]="蚂蚁部落四"; array[4]="

《数据结构、算法与应用》8.(顺序查找数组中第一个出现指定元素的位置)

最近在读<数据结构.算法与应用>这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢 8. 从左至右检查数组a[0:n-1]中的元素,以查找雨x相等的那些元素.如果找到一个元素与x相等,则函数返回x第一次出现所在的位置.如果在数组中没有找到这样的元素,函数则返回-1. // // main.cpp // Test_08 // // Created

移除数组中的元素

题目分析:移除数组中的元素可以分为两种情况, 1,不对原数组进行操作: 不对原数组进行操作的,可以新建一个数组,利用数组的栈方法 push,循环数组中的元素,把不等于特定元素的加入新数组. function remove(arr, item) {var res=[];for(var i=0;i<arr.length;i++){if(arr[i]==item){continue}else{res.push(arr[i]);}}return res; } 2,对原数组进行操作:可以利用数组的操作方法

第11题:移除数组中的重复元素

/* 前几天去爬泰山了,一直没更新,上山时还没什么感觉,下山后简直要崩溃啊,骨头都散了,继续更新...... */ 第11题:移除数组中的重复元素 给定一个升序排列的数组,去掉重复的数,并返回新的数组的长度. 例如: 数组A = {1, 1, 2},你的函数应该返回长度2,新数组为{1, 2} 要求: 不能新开数组分配额外的空间.即常数空间限制. 提示: 输入一个整数n,以及其对应的数组A[n],输出新数组长度 样例输入 5 0 0 1 1 2 样例输出 3 解析: #include <stdi

C# 移除数组中重复数据

#region 移除数组中重复数据 /// <summary> /// 移除数组中重复数据 /// </summary> /// <param name="array">需要除重的数组</param> /// <returns>不重复数组</returns> public static string[] DelRepeatData(string[] array) { return array.GroupBy(p =

移除数组中重复数据

#region 移除数组中重复数据 /// <summary> /// 移除数组中重复数据 /// </summary> /// <param name="array">需要除重的数组</param> /// <returns>不重复数组</returns> public static string[] DelRepeatData(string[] array) { return array.GroupBy(p =