陣列是存放在連續記憶體空間上的相同類型資料的集合,可以透過下標索引的方式取得到下標下對應的資料。
舉個栗子(字元陣列)~
#可以看到:
1、陣列的下標從0開始
2、陣列在記憶體中的位址是連續的
所以在刪除元素時,只能用覆蓋的方式進行。
例如,要刪除下標為2的元素~ 就需要從2之後的元素依序移到前一個,覆寫要刪除的元素。
#所以刪除元素並不是將該元素的空間釋放了,而是將後面的元素移到前面,覆掉要刪除的元素,然後將陣列的長度減去1,就能得到一個看似新的陣列。
在java中,二維陣列的儲存方式如下:
class Solution { public int search(int[] nums, int target) { // 避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算 if (target < nums[0] || target > nums[nums.length - 1]) { return -1; } int left = 0, right = nums.length - 1; while (left <= right) { int mid = left + ((right - left) >> 1); if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else if (nums[mid] > target) right = mid - 1; } return -1; } }
class Solution { public int removeElement(int[] nums, int val) { int size = nums.length; for (int i = 0; i < size;i++ ) { if (nums[i] == val) { // 发现需要移除的元素,就将数组后面集体向前移动一位 for (int j = i + 1; j < size; j++) { nums[j - 1] = nums[j]; } i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位 size--; } } return size; } }
class Solution { public int removeElement(int[] nums, int val) { int fast = 0;// 定义一个快指针遍历数组 int newLength = 0;// 定义新的数组长度 while(fast < nums.length){ if(nums[fast] != val){ nums[newLength++] = nums[fast]; } fast++; } return newLength; } }
以上是Java數組高頻考點實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!