Leetcode面T10(1-9)数组,你了解过移动端适配吗
作者:互联网
// }
// }
// return -1;
// }
//二分搜索法
public int findString(String[] words, String s) {
//直接二分搜索
int left = 0;
int right = words.length - 1;
//[left.right)
while(left <= right){
while(left < words.length && words[left].equals("")){
left++;
}
while(right >= 0 && words[right].equals("")){
right–;
}
int mid = left + (right - left) / 2;
while(mid < words.length && words[mid].equals("")){
mid++;
}
if(words[mid].equals(s)){
return mid;
}else if(words[mid].compareTo(s) > 0){
//收缩右边界,锁定左边界
right = mid - 1;
}else if(words[mid].compareTo(s) < 0){
//收缩左边界,锁定右边界
left = mid + 1;
}
}
return -1;
}
}
Q10.9 排序矩阵查找
给定M×N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。
示例:
现有矩阵 matrix 如下:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
给定 target = 5,返回 true。
给定 target = 20,返回 false。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sorted-matrix-search-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0) {
return false;
}
int m = matrix.length, n = matrix[0].length, row = 0, col = n - 1;
while (row < m && col >= 0) {
if (matrix[row][col] < target) {
row++;
} else if(matrix[row][col] > target) {
col–;
} else {
return true;
}
}
return false;
}
}
Q10.10 数字流的秩
假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说:
实现 track(int x) 方法,每读入一个数字都会调用该方法;
实现 getRankOfNumber(int x) 方法,返回小于或等于 x 的值的个数。
注意:本题相对原题稍作改动
示例:
输入:
[“StreamRank”, “getRankOfNumber”, “track”, “getRankOfNumber”]
[[], [1], [0], [0]]
输出:
[null,0,null,1]
提示:
x <= 50000
track 和 getRankOfNumber 方法的调用次数均不超过 2000 次
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rank-from-stream-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int[] nums;
public StreamRank() {
nums = new int[50002];
}
public void track(int x) {
// 避免为0
++x;
for (int i = x; i <= nums.length - 1; i += lowBit(i))
nums[i]++;
}
public int getRankOfNumber(int x) {
int sum = 0;
++x;
for (int i = x; i > 0; i -= lowBit(i))
sum += nums[i];
return sum;
}
public int lowBit(int x) {
return x & (-x);
}
Q10.11 峰与谷
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
示例:
输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]
提示:
nums.length <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/peaks-and-valleys-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
贪心,参考题解:
(1)如果i为峰的位置,则判断当前位置是否小于前一个位置(前一个为谷),若小于,则交换,大于则不处理。即: if(nums[i]<nums[i-1]) swap(nums[i],nums[i-1]);
(2)如果i为谷的位置,则判断当前位置是否大于前一个位置(前一个为峰),若大于,则交换,大于则不处理。即: if(nums[i]>nums[i-1]) swap(nums[i],nums[i-1]);
public void wiggleSort(int[] nums) {
/* 对数组排序 O(nlogn)
int[] res = Arrays.copyOf(nums, nums.length);
Arrays.sort(res);
int index = res.length - 1;
for(int i = 0;i < res.length;i += 2) {
nums[i] = res[index–];
小福利:
在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘
如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。
2021大厂最新Android面试真题解析
各个模块学习视频:如数据结构与算法
只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!
或直接点击这里前往我的GitHub中下载,就可以白嫖啦,记得给文章点个赞哦。
*第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!
或直接点击这里前往我的GitHub中下载,就可以白嫖啦,记得给文章点个赞哦。
标签:matrix,nums,int,适配,mid,length,T10,words,Leetcode 来源: https://blog.csdn.net/m0_66264856/article/details/122783502