小工具知识网

当前位置: 首页 > 行业知识 > 面试经典150题(101-104)

行业知识

面试经典150题(101-104)

2026-11-07 03:35:52 来源:互联网转载

leetcoindex.php/tags-41973.html" >de 150道题 计划花两个月时候刷完之未完成后转,今天(第1天)完成了4道(101-104)150:

()

101.(215. 数组中的第K个最大元素) 题目描述:

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

第一版(这个题看了好几天。。复习了快排的写法,也算有收获,最后还是看了解题)

()
class Solution {    Random random=new Random();    public int findKthLargest(int[] nums, int k) {        return quickSort(nums,0,nums.length-1,nums.length-k);    }    public int quickSort(int[] nums, int left,int right,int k){        if(left>=right){            return nums[k];        }        int randomIndex=left+random.nextInt(right-left+1);        swap(nums,left,randomIndex);        int middleNum=nums[left];        int leftTemp=left+1;        int rightTemp=right;        while(leftTemp            while(leftTemp                rightTemp--;            }            while(leftTemp                leftTemp++;            }            if(leftTemp=rightTemp){                break;            }            swap(nums,leftTemp,rightTemp);            leftTemp++;            rightTemp--;        }        swap(nums,left,rightTemp);        if(k==rightTemp){            return nums[rightTemp];        }else if(krightTemp){            return quickSort(nums,rightTemp+1,right,k);        }else{           return quickSort(nums,left,rightTemp-1,k);        }    }    public void swap(int[] nums, int left,int right){        int temp=nums[left];        nums[left]=nums[right];        nums[right]=temp;    }}    public int findKthLargest(int[] nums, int k) {        int len=nums.length;        PriorityQueueo2.compareTo(o1));        for(int num:nums){            priorityQueue.offer(num);        }        for(int i=0;i            priorityQueue.poll();        }        return priorityQueue.peek();    }}    public List        List{            return nums1[o1[0]]+nums2[o1[1]]-nums1[o2[0]]-nums2[o2[1]];        });        int m=nums1.length;        int n=nums2.length;        for(int i=0;i            priority.offer(new int[]{i,0});        }        while(k--0&&!priority.isEmpty()){            int[] temp=priority.poll();            List list=new ArrayList();            list.add(nums1[temp[0]]);            list.add(nums2[temp[1]]);            res.add(list);            if(temp[1]+1                priority.offer(new int[]{temp[0],temp[1]+1});            }        }        return res;    }}    public String addBinary(String a, String b) {        StringBuilder sb=new StringBuilder();        int lenA=a.length();        int lenB=b.length();        int indexA=lenA-1;        int indexB=lenB-1;        boolean flag=false;        while(indexA=0&&indexB>=0){            if(flag){                if(a.charAt(indexA)=='1'&&b.charAt(indexB)=='1'){                    sb.insert(0,'1');                }else if(a.charAt(indexA)=='1'||b.charAt(indexB)=='1'){                    sb.insert(0,'0');                }else{                    sb.insert(0,'1');                    flag=false;                }            }else{                if(a.charAt(indexA)=='1'&&b.charAt(indexB)=='1'){                    sb.insert(0,'0');                    flag=true;                }else if(a.charAt(indexA)=='1'||b.charAt(indexB)=='1'){                    sb.insert(0,'1');                }else{                    sb.insert(0,'0');                }            }            indexA--;            indexB--;        }        while(indexA>=0){            if(flag){                if(a.charAt(indexA)=='1'){                    sb.insert(0,'0');                }else{                    sb.insert(0,'1');                    flag=false;                }            }else{                if(a.charAt(indexA)=='1'){                    sb.insert(0,'1');                }else{                    sb.insert(0,'0');                }            }            indexA--;        }        while(indexB>=0){            if(flag){                if(b.charAt(indexB)=='1'){                    sb.insert(0,'0');                }else{                    sb.insert(0,'1');                    flag=false;                }            }else{                if(b.charAt(indexB)=='1'){                    sb.insert(0,'1');                }else{                    sb.insert(0,'0');                }            }             indexB--;        }        if(flag){            sb.insert(0,'1');        }        return sb.toString();    }}

104.(190. 颠倒二进制位)题目描述:

颠倒给定的 32 位无符号整数的二进制位。

第一版(java 有自带的 api )

public class Solution {    // you need treat n as an unsigned value    public int reverseBits(int n) {        return Integer.reverse(n);    }}

第二版(位运算)

public class Solution {    // you need treat n as an unsigned value    public int reverseBits(int n) {        int num=0;        for(int i=1;i            num

上一篇:生存战争二怎么启动服务器?

下一篇:纯音听力阀怎么属于正常?