将所有零都移到数组的前面或后面

时间:2016-09-13 19:44:49

标签: java arrays

将所有零移到数组的前面或后面,而不使用数据结构或临时数组。

apex:page doctype="html-5.0"  sidebar="false" showHeader="false">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<div ng-app = "app" ng-controller="myCtrl">
<p>Please upload you file:</p>
<p><input type="file"  ng-model="allText"/></p>
<button ng-click="readCSV()">Upload</button>
<button ng-click="extractfile()">test</button>
</div>
<div ng-repeat="f in constr">
    {{constr}}
</div>
<script>
var app = angular.module('app',[]);
.controller('myCtrl', myCtrl);
function myCtrl($scope) {
    $scope.$log = $log;
    $scope.readCSV = function($scope) {
        var allTextLines = $scope.allText.split(/\r\n|\n/);
        for ( var i = 0; i < allTextLines.length; i++) 
                  {
           var tarr = [];
           tarr.push(allTextLines[i]);
           }
    };
    $scope.extractfile = function(tarr) {
    var constr[];
    var deployobj ={
                         "Componenttype": Componenttype,
                         "ComponentApiname":ComponentApiname,
                     };
        deployobj.push(tarr);
        for (var j=0;j<$scope.deployobj.length;j++)
         {
         var str1 = "<members>";
         var str2 = "</members>";
         if ($scope.deployobj[j].Componenttype=== customobject) 
         {
         var result = str1 +" "+$scope.deployobj[j].Componenttype+" "+str3;
        $scope.constr.push(result);
        }
} 
};
}
</script>
</apex:page>

4 个答案:

答案 0 :(得分:2)

您只需要:

  • 维护数组中第一个非零项目的索引,

  • 您当前正在扫描的项目的索引。

  • 两个索引都从零开始。

  • 如果您当前正在扫描的项目不为零,则递增 扫描指数。

  • 如果您当前正在扫描的项目为零,请将其与 第一个非零索引处的项目,并递增两个索引。

  • 重复直到扫描索引到达数组末尾。

答案 1 :(得分:1)

简单,强力的方式就像反向插入排序:你迭代你的数组,如果你发现

a[i] = 0, and a[i-i] != 0 then you swap a[i] and a[i-1]

你继续迭代,直到你可以“走”整个数组而不再进行交换。

答案 2 :(得分:0)

这是一个使用java的Arrays.sort方法的解决方案:

$url_="";

$filename="File.csv";

file_put_contents('/home/file/path' . $filename, file_get_contents($url));

答案 3 :(得分:0)

如果您的数组中没有负数,则可以对其进行排序。您可以使用ArrayList以非常简单的方式完成此操作。

ArrayList<Integer> integers = new ArrayList<>();
integers.add(5);
integers.add(2);
integers.add(0);
integers.add(44);
integers.add(0);
integers.add(1);
integers.add(555);

integers.forEach(System.out::println);
integers.sort(Integer::compareTo);
System.out.println("Sorted!");
integers.forEach(System.out::println);

输出

5
2
0
44
0
1
555
Sorted!
0
0
1
2
5
44
555

但是如果你有负数,你需要编写自己的比较器,如下所示:

integers.sort((o1, o2) -> o1 == 0 ? -1 : 0);

如果o1(两个数字中的一个)为零,则将其设为较小,以使其获得较低的索引。

注意:如果您不想使用ArrayList,可以使用Arrays.sort(array, comparator);