給你兩個長度相同的整數陣列 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;
}