刷题-二分法
二分法
红黑色的圣西罗
#weareacmilan
展开
-
LeetCode 33. 搜索旋转排序数组
解法一:先用二分法找到旋转数组中的最小值,然后分别在最小值的左边和右边进行二分查找,保持时间复杂度是O(logn)+O(logn),最终还是O(logn)public class Solution { public int Search(int[] nums, int target) { if(nums==null || nums.Length<=0) { return -1; } int left .原创 2020-07-29 01:32:52 · 85 阅读 · 0 评论 -
LeetCode 349. 两个数组的交集
public class Solution { public int[] Intersection(int[] nums1, int[] nums2) { Dictionary<int,int> dic=new Dictionary<int,int>(); //输出的数组中不能有重复,考虑用字典来存储 Array.Sort(nums1); .原创 2020-07-29 01:15:18 · 82 阅读 · 0 评论 -
LeetCode 167. 两数之和 II - 输入有序数组
本题最好的方法是双指针法,但是这里解释一下二分法public class Solution { public int[] TwoSum(int[] numbers, int target) { for(int i=0;i<numbers.Length;i++) { int left=i+1; //从当前元素的下一个元素开始查找 int right=.原创 2020-07-29 01:08:20 · 82 阅读 · 0 评论 -
LeetCode 69. x 的平方根
当x较大时,中间变量mid由于类型是int(和函数返回值类型一致), mid * mid会溢出,导致实际结果可能是负数,所以要先强转成long再相乘,或者用mid和x/mid比较。public class Solution { public int MySqrt(int x) { int left=0; int right=x; int ans=-1; while(left<=right) { .原创 2020-07-29 01:07:50 · 79 阅读 · 0 评论 -
剑指offer 53-1 在排序数组中查找数字 I
public class Solution { public int Search(int[] nums, int target) { int first=FirstIndex(nums,target); int last=LastIndex(nums,target); int count=0; if(first>-1 && last>-1) { count=la.原创 2020-07-29 01:06:27 · 103 阅读 · 0 评论