33. search in rotated sorted array
題目:在乙個被旋轉一次的遞增陣列中找到目標值。
思路:二分法——思路一定要清晰!!!當mid和目標值不等時,判斷mid和start的大小,大於說明旋轉位置在後面,反之在前面。在後面的時候start-mid是遞增的,可以直接判斷目標值在不在其中。同理,在前面的時候mid-end是遞增的,可以直接判斷目標值在不在其中。
public class solution
else
}else
else}}
return -1;
}}
81. search in rotated sorted array ii
題目:有重複怎麼辦?
思路:在33題基礎上,判斷start等於mid時,只能start++遍歷移動,因為此時無法判斷旋轉點在前半段還是後半段。
public class solution
else
}else if(nums[mid] < nums[start])
else
}else
}return false;
}}
153. find minimum in rotated sorted array
題目:在乙個旋轉陣列中找到最小值。
思路:二分法——利用二分法將start和end卡在正好反轉的兩端,由此只需判斷mid與其前後數的關係就可以找到正好旋轉的那一點,即找到最小值。
public class solution
else
}return nums[0];
}}
34. search for a range
題目:在陣列中找到目標值的範圍,沒有的話用【-1,-1】表示。
思路:二分法——基本的思想是先用二分找到目標值,在分別在【start,mid】以及【mid,start】兩個區間內繼續利用二分找到上範圍和下範圍。
public class solution ;
if(nums.length < 1) return ret;
int start = 0, end = nums.length-1;
while(start <= end)
else
}//ret[0] = nums[start]==target?start:start+1;
ret[0] = start;
}mid = mid_cp;
if(nums[end] == target) ret[1] = end;
else
else
}//ret[1] = nums[end]==target?end:end-1;
ret[1] = end;
}return ret;
}else if(nums[mid] > target)
else
}return ret;
}}
278. first bad version
題目:在1到n中找到第乙個壞版本。
思路:二分——很簡單,但是要注意用start+(end-start)/2,不要用(start+end)/2,不然就tle。
/* the isbadversion api is defined in the parent class versioncontrol.
boolean isbadversion(int version); */
public class solution extends versioncontrol
else
}return start;
}}
374. guess number higher or lower
題目:猜數字
思路:二分——很簡單
/* the guess api is defined in the parent class guessgame.
@param num, your guess
@return -1 if my number is lower, 1 if my number is higher, otherwise return 0
int guess(int num); */
public class solution extends guessgame
else
}return start;
}}
35. search insert position
題目:找到目標值或者應該插入的位置
思路:二分法——很簡單
public class solution
else
}return start;
}}
41. first missing positive
題目:找到陣列中第乙個不見的正整數
思路:分三步:第一步將負數標記為0,第二步將每位非零數對應的位置上標記為負數,0則標記為該位正整數的負數。第三步統計第乙個非負數的位置,返回。
public class solution
for(int i = 0; i < nums.length; i++)
else if(nums[x-1] > 0)}}
for(int i = 0; i < nums.length; i++)
return nums.length+1;
}}
其他的解法有將數通過交換放在對應位置上,最後統計如果存在不對應的就返回。
LeetCode 陣列系列(間隔)
56.merge intervals 題目 interval包含start和end,將重疊部分合併 思路 用start和end標記目前的最後乙個,但不急著加到list裡面,因為可能有變化,對list操作時間複雜度高。還需要注意對interval型別進行compare函式重寫,或是使用匿名比較器。de...
leetcode連續陣列系列
560 和為k的子陣列 給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子數 組的個數。示例 1 輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。這道題暴力的解法就是先儲存陣列的字首和,然後遍歷差分,求所有和為k的子陣列,時間複雜度為o n 2...
Leetcode 陣列之和系列
leetcode 1.兩數之和 方法1 排序 查詢 方法2 雜湊法 class solution def twosum self,nums list int target int list int sum 0 m for i in range len nums sum nums i if targe...