iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

非資工本科的Leetcode刷題筆記系列 第 27

Day 27 - Array and String - Two Pointer Technique

  • 分享至 

  • xImage
  •  

雖然在Linked List Explore Card 中也有提及雙指針演算法,當時是直接講了快慢指針算法,我們為了要判斷鏈結陣列中是否有環狀結構,使用的兩個指針都是從頭開始往前移動,而這邊給了另一個問題。

Reverse the elements in an array.

這個問題使用單指針的話會需要另外建立一個陣列,而使用雙指針就可以使用原地操作,如下面所展示的程式碼。

public void reverse(int[] array) {
	int temp = 0;
  for (int i = 0, j = array.length - 1; i < j; i++, j--) {
  	temp = array[i];
    array[i] = array[j];
    array[j] = temp;
	}
}

Given an array and a value, remove all instances of that value in-place and return the new length.

這又是先前有解過的問題,使用原地操作移除在陣列中的指定元素,與上一個問題一樣,如果使用單指針的話需要另外建立一個新的陣列,使用雙指針就可以節省空間。

public int removeElement(int[] nums, int val) {
    int k = 0;
    for (int i = 0; i < nums.length; ++i) {
        if (nums[i] != val) {
            nums[k] = nums[i];
            k++;
        }
    }
    return k;
}

LeetCode Problem


小結

其實上網查一下就有很多雙指針演算法的資料,根本不止Explore Card 寫的這些用法,不過Explore Card 也只是入門學習,要深入學習的話還是要多查多看多學。


上一篇
Day 26 - Array and String - String Problem
下一篇
Day 28 - Array and String - Two Pointer Problem
系列文
非資工本科的Leetcode刷題筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言