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;
}
}