从数组中返回指定长度的子数组[转]

  1 using System;
  2 using System.Collections.Generic;
  3 using System.IO;
  4 using System.Runtime.Serialization;
  5 using System.Runtime.Serialization.Formatters.Binary;
  6
  7 namespace ConsoleApplication3
  8 {
  9     class Program
 10     {
 11         static void Main(string[] args)
 12         {
 13             //要操作的源数组
 14             List<int> originalArray = new List<int>();
 15             for (int i = 1; i <= 10; i++)
 16             {
 17                 originalArray.Add(i);
 18             }
 19             Console.Write("源数组:");
 20             foreach (int item in originalArray)
 21             {
 22                 Console.Write(item + " ");
 23             }
 24             Console.WriteLine();
 25             //得到指定长度的子数组
 26             List<List<int>> resultArray = SubChildArray(originalArray, originalArray.Count - 1);
 27
 28             for (int i = 0; i < resultArray.Count; i++)
 29             {
 30                 Console.Write("子数组" + (i + 1) + ":");
 31                 for (int j = 0; j < resultArray[i].Count; j++)
 32                 {
 33                     Console.Write(resultArray[i][j] + " ");
 34                 }
 35                 Console.WriteLine();
 36             }
 37
 38             Console.WriteLine("子数组的数量:" + resultArray.Count);
 39             Console.ReadKey();
 40         }
 41         /// <summary>
 42         /// 得到指定长度的子数组
 43         /// </summary>
 44         /// <param name="originalArray">源数组</param>
 45         /// <param name="arrayLength">要取出子数组的长度</param>
 46         /// <returns></returns>
 47         static List<List<int>> SubChildArray(List<int> originalArray, int arrayLength)
 48         {
 49             List<List<int>> result = new List<List<int>>();
 50             List<int> one = new List<int>();
 51
 52             for (int i = 0; i < originalArray.Count; i++)
 53             {
 54                 one.Add(originalArray[i]);
 55                 Add(originalArray.GetRange(i + 1, originalArray.Count - 1 - i), arrayLength - 1, result, one);
 56                 if (one.Count != 0)
 57                     one.RemoveAt(one.Count - 1);
 58                 //这里很可以用one.Clear();
 59                 //循环完一次后,就可以清除one,然后再重新开始
 60             }
 61             return result;
 62         }
 63         /// <summary>
 64         /// 用于递归的函数
 65         /// </summary>
 66         /// <param name="array"></param>
 67         /// <param name="n"></param>
 68         /// <param name="result"></param>
 69         /// <param name="one"></param>
 70         static void Add(List<int> array, int n, List<List<int>> result, List<int> one)
 71         {
 72             //如果n=0,就表明one的Count属性已等于n
 73             if (n == 0)
 74             {
 75                 result.Add(Clone(one) as List<int>);
 76                 //进行下一次之前,移除最后一个元素
 77                 one.RemoveAt(one.Count - 1);
 78             }
 79             else
 80             {
 81                 for (int i = 0; i < array.Count; i++)
 82                 {
 83                     one.Add(array[i]);
 84                     //在这里进行递归,同时n-1
 85                     Add(array.GetRange(i + 1, array.Count - 1 - i), n - 1, result, one);
 86                 }
 87                 //一轮结束后,移除最后一个元素
 88                 one.RemoveAt(one.Count - 1);
 89             }
 90         }
 91         /// <summary>
 92         /// 用来复制对象的函数
 93         /// </summary>
 94         /// <param name="obj"></param>
 95         /// <returns></returns>
 96         public static object Clone(object obj)
 97         {
 98             using (MemoryStream ms = new MemoryStream())
 99             {
100                 IFormatter formattor = new BinaryFormatter();
101                 formattor.Serialize(ms, obj);
102                 ms.Seek(0, SeekOrigin.Begin);
103                 return formattor.Deserialize(ms);
104             }
105         }
106     }
107 }

转自:http://www.cnblogs.com/xiangism/archive/2009/09/06/1561398.html

时间: 2024-10-06 02:43:45

从数组中返回指定长度的子数组[转]的相关文章

从数组中返回最大长度的所有子数组

C# 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApplication4 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 List<int> originalList = new List<int>(); 13

SQLServer中查询的数字列前面补0返回指定长度的字符串

SQLServer中查询的数字列前面补0返回指定长度的字符串: 如: 角本如下: /****** Script for SelectTopNRows command from SSMS ******/ SELECT TOP 1000 [ID] ,[SN] ,[Name] FROM [EduDB].[dbo].[TestTab] select Right('0123456',SN) from TestTab; select RIGHT(REPLICATE('0',5)+CAST(SN AS var

程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】

转!http://blog.csdn.net/dabusideqiang/article/details/38271661 11.求旋转数组的最小数字 题目:输入一个排好序的数组的一个旋转,输出旋转数组的最小元素. 分析:数组的旋转:把一个数组最开始的若干个元素搬到数组的末尾.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.这道题最直观的解法并不难.从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N).但这个思路没有利用输入数组

学underscore在数组中查找指定元素

前言 在开发中,我们经常会遇到在数组中查找指定元素的需求,可能大家觉得这个需求过于简单,然而如何优雅的去实现一个 findIndex 和 findLastIndex.indexOf 和 lastIndexOf 方法却是很少人去思考的.本文就带着大家一起参考着 underscore 去实现这些方法. 在实现前,先看看 ES6 的 findIndex 方法,让大家了解 findIndex 的使用方法. findIndex ES6 对数组新增了 findIndex 方法,它会返回数组中满足提供的函数的

ES6数组中删除指定元素

知识点: ES6从数组中删除指定元素 findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引.否则返回-1. arr.splice(arr.findIndex(item => item.id === data.id), 1) http://louiszhai.github.io/2017/04/28/array/ 1:js中的splice方法 splice(index,len,[item]) 注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组

在一个升序的但是经过循环移动的数组中查找指定元素

数组是升序的,数组经过循环移动之后,肯定是有左半部分或者有半部分还是升序的. 代码: public class SearchRotateArray { public static int search(int a[], int l, int u, int x) { while(l<=u){ int m = (l+u)/2; if(x==a[m]){ return m; }else if(a[l]<=a[m]){ //左半部分升序排列 if(x>a[m]){ l=m+1; }else if

旋转数组中查找指定元素

如题,在旋转数组中查找指定元素,考虑到多种情况,网上的方法大部分没有考虑,当low,high,mid三个值相等时的情况. 代码如下: int findAll(int A[],int low,int high,int value)//当三个相等时,查找全部元素的函数. { for(int i = low;i < high;i++) { if(A[i]==value) return i; } return -1; } int find(int A[],int n,int value)//查找旋转数组

php 按照二位数组中某个指定的字段进行排序

/** * 按照二维数组中某个指定的某个字段进行排序 * @param $array 需要被排序的数组 * @param $flag 排序的标志 1,SORT_DESC 降序 2,SORT_ASC 升序 * @param int $range * @return array */function assortArray2($array,$flag,$keyword){ $sort = array( 'direction' => $flag, //排序顺序标志 1 ,SORT_DESC 降序:2

PHP从多维数组中返回单列数组

array_column (PHP 5 >= 5.5.0) array_column — 返回数组中指定的一列,并且可以用相应的id作为键值,很好用的内置数组函数. http://php.net/manual/zh/function.array-column.php 自定义方法: public static getArrayByKey($arData, $key='id'){ $arRe = array(); if (is_array($arData)) { for ($i=0; $i < c