最好设置一个哨兵节点,操作方便。在“21. 合并两个有序链表”这一题中自己写了一遍,感觉不够优雅,看看别人是怎么写的。 Copy //归并解法,堆解法也要会classSolution{publicListNode mergeKLists(ListNode[] lists) {//特殊边界问什么这样写?包含了输入是[],[[]]的情况吗--不是[[]]长度为1,包含了一个空...
classSolution{int[] nums;publicintfindKthLargest(int[] nums,intk){this.nums=nums;quickSort(0,nums.length-1,k);returnnums[k-1]; }voidquickSort(intleft,intright,intk){if(left>=right)return;intpos=(int)(Math.random()*(right-left+1))+left;intpivot=nums[pos];inttmp=0; tmp=nums[le...
注意数字越界。 十叉树的前序遍历问题。 十叉树的节点值:1的孩子有10,11...19,10的孩子有100,101,102...109。 cur指向当前节点值。 高效办法是,计算以cur为根的子树的节点个数,就可以知道往右走还是往子树走了。 计算节点值的方法是按层计算。 Copy classSolution{publicintfindKthNumber(intn,intk){ k...
intk,intlo,inthi){//[lo,hi]内处理if(lo>hi)return;//如果是lo==hi会报错,报栈溢出inti=lo,j=hi;//存起来,递归要用intpivot=arr[lo];//默认轴点,首元素while(lo<hi){while(lo<hi&&arr[hi]>=pivot)hi--;