C練題筆記之:Leetcode-1460. 通過翻轉子陣列使兩個陣列相等

2020-08-11 23:02:19

題目:

給你兩個長度相同的整數陣列 target 和 arr 。

每一步中,你可以選擇 arr 的任意 非空子陣列 並將它翻轉。你可以執行此過程任意次。

如果你能讓 arr 變得與 target 相同,返回 True;否則,返回 False 。

範例 1:

輸入:target = [1,2,3,4], arr = [2,4,1,3]
輸出:true
解釋:你可以按照如下步驟使 arr 變成 target:
1- 翻轉子陣列 [2,4,1] ,arr 變成 [1,4,2,3]
2- 翻轉子陣列 [4,2] ,arr 變成 [1,2,4,3]
3- 翻轉子陣列 [4,3] ,arr 變成 [1,2,3,4]
上述方法並不是唯一的,還存在多種將 arr 變成 target 的方法。
範例 2:

輸入:target = [7], arr = [7]
輸出:true
解釋:arr 不需要做任何翻轉已經與 target 相等。
範例 3:

輸入:target = [1,12], arr = [12,1]
輸出:true
範例 4:

輸入:target = [3,7,9], arr = [3,7,11]
輸出:false
解釋:arr 沒有數位 9 ,所以無論如何也無法變成 target 。
範例 5:

輸入:target = [1,1,1,1,1], arr = [1,1,1,1,1]
輸出:true

提示:

target.length == arr.length
1 <= target.length <= 1000
1 <= target[i] <= 1000
1 <= arr[i] <= 1000

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/make-two-arrays-equal-by-reversing-sub-arrays
著作權歸領釦網路所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

結果:

解題思路:

1,按照target的順序將arr陣列調整順序

2,若找不到對應的字母則報錯(當j 必定是從i個位置開始往後找,前面的都是對齊的)

程式碼:

bool canBeEqual(int* target, int targetSize, int* arr, int arrSize){
    int i, j;
    if(targetSize == 1)
    {
        if(arr[0] == target[0])
            return true;
        else
            return false;
    }
    for(i = 0; i < targetSize; i++)
    {
        if(arr[i] == target[i])  continue;;
        for(j = i; j < targetSize; j++)
        {
            if(arr[j] == target[i])
            {
                int temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
                break;
            }
        }
        if(j == targetSize)
            return false;
    }
    return true;
}