データ構造学習(Java版) - アレイ

通常の配列

配列定義:

配列は、同じ型の順序付きコレクションです。同じタイプの配列は、それら特定の組み合わせの順序に従って、データの数に記載しました。各アレイ要素がデータと呼ばれており、各配列要素は、インデックスを介してアクセスすることができます

配列の基本的な機能:

  1. その長さは、作成時に決定され、変更することはできません。
  2. その要素は、同じ型でなければなりません。
  3. これは任意のデータ要素、及びベースを含む医療型のタイプであってもよいです。
  4. 例えば、意味を持つことができインデックス付きの配列は、数字を学ぶことができます。

の配列を作成し、初期化します

配列を宣言します

// 阿里巴巴强制规范
type[] arr_name;


type arr_name[];

配列の初期化

1.静的初期化

int[] a = {1, 2, 3};

Man[] mans = {
new Man(1, 1);
new Man(2, 2);
};

2.動的な初期化

int[] a = new int[2];
a[0] = 1;
a[1] = 2;

3.デフォルトの初期化の配列

// {0, 0}
int[] a = new int[2];
// {false, false}
boolean[] b = new boolean[2];
// {null, null}
String[] s = new String[2];

4.配列の境界

添字正当区間[0、長さ-1]

動的配列

動的配列の定義:

    JavaでのArrayListは、ダイナミックアレイで、および増加動的要素の減少を提供します。

ダイナミックアレイの基本的な特性:

  1. アレイのサイズは自動的に要素の数に応じて調整することができます。
  2. あなたは、基本データ型を格納することはできません。

動的配列を作成し、初期化します

動的配列の初期化を宣言する

ArrayList<type> arr_name = new ArrayList<>();

添字法的区間[0、サイズ1]:配列の境界

要約:

boolean add(E e)
          このリストの最後に、指定された要素。
 void add(int index, E element)
          このリスト内の指定された位置に指定された要素。
 boolean addAll(Collection<? extends E> c)
          指定されたコレクションの要素の順序に従って反復子は、このリストの末尾に、コレクションのすべての要素が返されました。
 boolean addAll(int index, Collection<? extends E> c)
          このリストに指定されたコレクション内のすべての要素は、指定された場所から開始します。
 void clear()
          このリスト内のすべての要素を削除します。
 Object clone()
          戻り値このArrayListのインスタンスのシャローコピーを。
 boolean contains(Object o)
          このリストに含まれる要素を指定する場合は、trueを返します。
 void ensureCapacity(int minCapacity)
          必要であれば、それは、少なくともパラメータで指定された要素の数の最小容量を保持できることを保証するために、このArrayListのインスタンスの容量を増加させます。
 E get(int index)
          場所にこのリスト内の指定された要素を返します。
 int indexOf(Object o)
          戻り値初めてまたはこのリスト内の指定された要素のインデックスこのリストは要素、または-1含まれていない場合。
 boolean isEmpty()
          このリストには要素が真でない場合
 int lastIndexOf(Object o)
          戻り値は、最後に現れたこのリスト内の指定された要素のインデックス、またはこのリストには、インデックスを含まない場合、または-1。
 E remove(int index)
          このリストで指定された場所にある要素を削除します。
 boolean remove(Object o)
          最初の発生(存在する場合)のリストで指定された要素を削除します。
protected  void removeRange(int fromIndex, int toIndex)
          の(包括的)fromIndexのとtoIndexの間のインデックスリスト(含まれていない)内のすべての要素を削除します。
 E set(int index, E element)
          指定された位置に、このリストの要素で指定された要素を持つ代替。
 int size()
          このリスト内の要素の数を返します。
 Object[] toArray()
          (最初から最後の要素まで)、このリスト内のすべての要素を含有する適切な順序配列。
<T> T[]
toArray(T[] a)
          (最初から最後の要素まで)適切な順序は、リスト内のすべての要素の配列を返し、指定されたタイプの返された配列は、アレイ動作のタイプである場合。
 void trimToSize()
          現在のリストの大きさのこの容量調整のArrayListのインスタンス。

 

例:

アレイ:滞在ボタン-質問番号-1313- https://leetcode-cn.com/problems/decompress-run-length-encoded-list/submissions/

 

あなたの整数NUMSのランレングス圧縮符号化リストを与えるために。

二つの隣接する各対の要素[A、B] = [NUMS [2 * i]は、NUMS [2 * I + 1](I> = 0の場合)、各ペアはリア減圧発現を検討B要素の値。

解凍後のリストに戻ってください。

例:

入力:NUMS = [1,2,3,4]
出力:[2,4,4,4-]
説明:最初のペア[1,2]出現2の周波数は配列[2]を生成するために、1で表します。
第二の対[3,4]は配列[4,4,4]を生成するために、3出現4の周波数を表します。
最後に一緒に直列に[2] + [4,4,4,4] = [2,4,4,4-]に。

ヒント:

2 <= nums.length <= 100
nums.length % 2 == 0
1 <= nums[i] <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/decompress-run-length-encoded-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

(这里注意下,实际上这种方式很麻烦,只是为了写一个数组应用的例子)

class Solution {
    public int[] decompressRLElist(int[] nums) {
		int size = 0;
		for (int i = 0; i < nums.length; i+=2) {
			size+=nums[i];
		}
		int[] res = new int[size];
		int pointer = 0;
		for (int i = 0; i < res.length; i+=2) {
			if(i<nums.length) {
				for (int j = 0; j < nums[i]; j++) {
					res[pointer] = nums[i+1];
					pointer++;
				}
			}
		}
        return res;
    }
}

动态数组

class Solution {
    public int[] decompressRLElist(int[] nums) {
		ArrayList<Integer> a = new ArrayList<>();
		for (int i = 0; i < nums.length; i+=2) {
			for (int j = 0; j < nums[i]; j++) {
				a.add(nums[i+1]);
			}
		}
		int[] res = new int[a.size()];
		for (int i = 0; i < a.size(); i++) {
			res[i] = a.get(i);
		}
        return res;
    }
}

 

 
发布了33 篇原创文章 · 获赞 22 · 访问量 6737

おすすめ

転載: blog.csdn.net/qq_42909053/article/details/104301726