• leetcode刷题,摸索二分法


    public class Solution {
        public int SearchInsert(int[] nums, int target) {
            if (nums.Contains(target))
            {
                return Array.IndexOf(nums, target);
            }
            else
            {
                return zhong(nums,0,nums.Length-1,target);
            }
        }
        private int zhong(int[] ss,int start,int end,int target)
        {
            if (target < ss[end] && target > ss[start])
            {
                if (ss[(int)((start + end) / 2)] < target && target < ss[(int)((start + end) / 2) + 1])
                {
                    return (int)((start + end) / 2) + 1;
                }
                else
                {
                    if(ss[(int)((start + end) / 2)] > target)
                    {
                        return zhong(ss, start, (int)((start + end) / 2),target);
                    }
                    else
                    {
                        return zhong(ss, (int)((start + end) / 2),end , target);
                    }
                }
            }
            else
            {
                if (target < ss[start])
                {
                    return start;
                }
                else
                {
                    return end+1;
                }
            }
        }
    }

    //又一版二分法
        public int half(int[] nums,int target,int start,int end){
            if(nums.Length==0){
                return 0;
            }
            else if(nums[0]>=target){
                return 0;
            }
            else if(nums[nums.Length-1]<=target){
                return nums.Length;
            }
            else{
                if(nums[(start+end)/2]<=target){
                    if(nums[(start+end)/2+1]>=target){
                        return (start+end)/2+1;
                    }
                    else{
                        return half(nums,target,(start+end)/2,end);
                    }
    
                }
                else{
                    if((start+end)/2-1<0){
                        return 0;
                    }
                    else{
                        if(nums[(start+end)/2-1]<=target){
                            return (start+end)/2;
                        }
                        else{
                            return half(nums,target,start,(start+end)/2);
                        }
                    }
                }
            }
        }
    }

    C#代码,望大神指正

  • 相关阅读:
    谁知道怎么获得客户端的语系,不是encoding哦
    如何动态控制弹出窗体的大小
    维权成功!
    KFC的mm在练习做圣代
    CICD自动化发版系统设计简介
    java IO (File类)
    StringBuffer
    Arrays和比较器
    java正则
    Math和Random类
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/10369675.html
Copyright © 2020-2023  润新知