Leetcode面T10(1-9)数组(1)

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/search-rotate-array-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {

public int search(int[] arr, int target) {

for (int i = 0; i < arr.length; i++) {

if (arr[i]==target){

return i;

}

}

return -1;

}

}

Q10.5 稀疏数组搜索

稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。

示例1:

输入: words = [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,“dad”, “”, “”], s = “ta”

输出:-1

说明: 不存在返回-1。

示例2:

输入:words = [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,“dad”, “”, “”], s = “ball”

输出:4

提示:

words的长度在[1, 1000000]之间

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/sparse-array-search-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

在Java中判断字符串值是否相等用s1,equals(s1)。不要直接用==,被耗了好长时间mmp.

class Solution {

//直接法

// public int findString(String[] words, String s) {

// for(int i =0;i <words.length;i++){

// if(words[i].equals(s)){

// return i;

// }

// }

// 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–];

}

for(int i = 1;i < res.length;i += 2) {

nums[i] = res[index–];

}

*/

// 直接遍历 O(n)

for(int i = 1;i < nums.length;i++) {

if(i % 2 == 1) {

if(nums[i] > nums[i - 1]) {

int temp = nums[i];

nums[i] = nums[i - 1];

nums[i - 1] = temp;

}

}else {

if(nums[i] < nums[i - 1]) {

int temp = nums[i];
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。

在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。

在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

[外链图片转存中…(img-sZqtxb0t-1713391953959)]

[外链图片转存中…(img-ujeGl8V6-1713391953960)]

[外链图片转存中…(img-hLtpyJej-1713391953961)]

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值