441.排列硬币
额,一层循环超时,答案思路是硬币数n对应的完整楼梯数从1-n中找。
二分有时要根据题目来变通,比如
mid=left+(right-left+1)/2;这里如果不加个1,
当n为2时,会陷入死循环。
class Solution {
? ? public int arrangeCoins(int n) {
? ? ? ? int left=1,right=n;
? ? ? ? while(left<right){
? ? ? ? ? ? int mid=left+(right-left+1)/2;
? ? ? ? ? ? if((long)mid*(mid+1)>(long)2*n)
这里要强转为long型,要不然有的用例过不去。
? ? ? ? ? ? right=mid-1;
? ? ? ? ? ? else?
? ? ? ? ? ? left=mid;
? ? ? ? }
? ? ? ? return left;
?
? ? }
}
26.删除有序数组中的重复项
这题虽然做出来了,说简单也简单,说难也有一点,主要是有个细节我想半天,就是nums的第一个数不要动。
要不然总有用例不过,也可以用其他方法分类讨论。
class Solution {
? ? public int removeDuplicates(int[] nums) {
? ? ? ? int j=1;
? ? ? ? int n=nums.length;
? ? ? ? if(n==1)
? ? ? ? return 1;
? ? ? ? for(int i=0;i<n-1;i++){
? ? ? ? ? ? if(nums[i]!=nums[i+1])
? ? ? ? ? ? nums[j++]=nums[i+1];
? ? ? ? }
? ? ? ? return j;
? ? }
}
?
|