215. 数组中的第K个最大元素
权值树状数组+二分
| class Solution { |
| int[] c; |
| int up; |
| public int findKthLargest(int[] nums, int k) { |
| |
| |
| Set<Integer> set = new TreeSet<>(); |
| for(int i = 0; i < nums.length; ++ i ) set.add(nums[i]); |
| |
| |
| Map<Integer, Integer> map = new HashMap<>(); |
| int[] disc = new int[set.size() + 1]; |
| up = 0; |
| for(Integer val : set) { |
| map.put(val, ++ up); |
| disc[up] = val; |
| } |
| |
| |
| c = new int[up + 1]; |
| for(int i = 0; i < nums.length; ++i ) { |
| add(map.get(nums[i]), 1); |
| } |
| k = nums.length - k + 1; |
| return disc[kth(k)]; |
| } |
| |
| public int kth(int k) { |
| int l = 1, r = up; |
| int ans = -1; |
| while(l <= r) { |
| int mid = l + ((r - l) >> 1); |
| int tar = getsum(mid); |
| if(tar >= k) { |
| ans = mid; |
| r = mid - 1; |
| } else if(tar < k){ |
| l = mid + 1; |
| } |
| } |
| return ans; |
| } |
| |
| public int getsum(int x) { |
| int ans = 0; |
| while(x > 0) { |
| ans += c[x]; |
| x -= lowbit(x); |
| } |
| return ans; |
| } |
| |
| public void add(int x, int k) { |
| while(x <= up) { |
| c[x] += k; |
| x += lowbit(x); |
| } |
| } |
| |
| public int lowbit(int x) { |
| return x & -x; |
| } |
| } |
三路快速排序
| class Solution { |
| public int findKthLargest(int[] nums, int k) { |
| return quickSort(nums, 0, nums.length, nums.length - k + 1); |
| } |
| |
| public int quickSort(int[] nums, int l, int r, int k) { |
| int pivot = nums[l]; |
| int i = l, lit = l, rit = r; |
| while(i < rit) { |
| if(nums[i] < pivot) { |
| swap(nums, i ++ , lit ++ ); |
| } else if(nums[i] > pivot) { |
| swap(nums, i, -- rit); |
| } else { |
| ++ i; |
| } |
| } |
| if(lit == l && rit == r) return pivot; |
| if(rit < k) return quickSort(nums, rit, r, k); |
| if(rit > k) return quickSort(nums, l, rit, k); |
| return pivot; |
| } |
| |
| public void swap(int[] nums, int x, int y) { |
| if(x == y) return; |
| nums[x] = nums[x] ^ nums[y]; |
| nums[y] = nums[x] ^ nums[y]; |
| nums[x] = nums[x] ^ nums[y]; |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效