학습 기록 (Learning Logs)/알고리즘

https://leetcode.com/problems/binary-search/submissions/

devWonny 2022. 8. 16. 12:11

binary Search

 

 

 

1) inner class call

//기준 클래스
//클래스 내부 메서드를 호출한다.



public class BinarySearch {
    // https://leetcode.com/problems/binary-search/

    //main 메서드
    public static void main(String[] args) {
        int[] num = {-1,0,3,5,9,12};
        // int target = 9;//4

        int target = 2;//-1

        int result = search(num,target);
        System.out.println(result);
    }

    
// static을 메서드에 달아줘야 main에서 호출이 가능하다
// 클래스 내부 메서드는 객체를 생성하지 않고 사용 가능
    public static int search(int[] nums, int target) {
        int start = 0;
        int end = (nums.length)-1;//5
        int mid =0;
        
        while(start <= end){
            System.out.println("start="+start+"   end="+end+"   mid="+mid);

            mid = start + (end-start)/2;
            System.out.println("first mid>> "+mid);// 1
            if(target == nums[mid]){
                return mid;
            }
            else if(target<nums[mid]){
                end = mid-1;// 왼쪽으로 탐색해

            }else{
                start = mid+1;// 오른쪽으로 탐색해
            }
        }
        return -1;
    }
    
}

 

 

2) outer class call

//외부 클래스
class Solution {
    public int search(int[] nums, int target) {
        int start = 0;
        int end = (nums.length)-1;//5
        int mid =0;
        
        while(start <= end){
            System.out.println("start="+start+"   end="+end+"   mid="+mid);

            mid = start + (end-start)/2;
            System.out.println("first mid>> "+mid);// 1
            if(target == nums[mid]){
                return mid;
            }
            else if(target<nums[mid]){
                end = mid-1;// 왼쪽으로 탐색해

            }else{
                start = mid+1;// 오른쪽으로 탐색해
            }
        }
        return -1;
    }
}

//외부 클래스를 객체를 생성해서 함수를 호출한다
//기준 클래스
public class BinarySearch2 {
    // https://leetcode.com/problems/binary-search/
    public static void main(String[] args) {
        int[] num = {-1,0,3,5,9,12};
        int target = 9;//4
        Solution sol = new Solution();
        int result = sol.search(num,target);
        System.out.println(result);
    }
    
}

 

3) javascirpt

while(right-left >= 0) 으로 해줘야함

 

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    let left =0;
    let right =nums.length -1;
    
    while(right-left>=0){
        let mid = left+parseInt((right-left)/2);
        console.log(mid);
        
        if(target == nums[mid]){
            return mid;
        }else if(target> nums[mid]){// 더 오른쪽
            left = mid+1;
        }else{
            right = mid-1;
        }
    }
    return -1;
    
};

 

 

4) python

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left, right = 0, len(nums)-1
        while(left<=right):
            mid = left + ((right-left)//2)
            if nums[mid] == target:
                return mid;
            elif target > nums[mid]:
                #오른쪽 탐색
                left = mid+1
            else: #왼쪽 탐색
                right = mid-1
        return -1