给定一个二进制数组, 计算其中最大连续 1 的个数。
示例:
输入:[1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int count = 0;
int ans = 0;
for (int i : nums) {
if (i == 1) {
count++;
}
else {
ans = Math.max(count, ans);
count = 0;
}
}
return Math.max(count, ans);
}
}
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例 1:
输入:[3, 2, 1]
输出:1
解释:第三大的数是 1 。
class Solution {
public int thirdMax(int[] nums) {
int n = nums.length;
if (n == 1)
return nums[0];
Arrays.sort(nums);
int count = 1;
int cur = nums[n - 1];
for (int i = n - 1; i >= 0; i--) {
if (nums[i] < cur) {
count++;
cur = nums[i];
}
if (count == 3) {
return nums[i];
}
}
return nums[n - 1];
}
}
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
提示:
num1
和num2
的长度都小于 5100num1
和num2
都只包含数字 0-9
num1
和num2
都不包含任何前导零class Solution {
public String addStrings(String num1, String num2) {
int i = num1.length() - 1;
int j = num2.length() - 1;
int add = 0;
StringBuffer ans = new StringBuffer();
while (i >= 0 || j >= 0 || add != 0) {
int x = i >= 0 ? num1.charAt(i) - '0' : 0;
int y = j >= 0 ? num2.charAt(j) - '0' : 0;
int result = x + y + add;
ans.append(result % 10);
add = result / 10;
i--;
j--;
}
ans.reverse();
return new String(ans);
}
}
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
示例:
输入: "Hello, my name is John"
输出: 5
解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。
class Solution {
public int countSegments(String s) {
int ans = 0;
for (int i = 0; i < s.length(); i++) {
if ((i == 0 || s.charAt(i - 1) == ' ') && s.charAt(i) != ' ') {
ans++;
}
}
return ans;
}
}
整数数组 nums
按升序排列,数组中的值 互不相同 。
在传递给函数之前,nums
在预先未知的某个下标 k
(0 <= k < nums.length
)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7]
在下标 3
处经旋转后可能变为 [4,5,6,7,0,1,2]
。
给你 旋转后 的数组 nums
和一个整数 target
,如果 nums
中存在这个目标值 target
,则返回它的下标,否则返回 -1
。
示例 1:
输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4
class Solution {
public int search(int[] nums, int target) {
int n = nums.length;
if (n == 1) {
if (nums[0] == target)
return 0;
else
return -1;
}
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
}
if (nums[mid] >= nums[0]) {
if (target >= nums[0] && target < nums[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
} else {
if (target > nums[mid] && target <= nums[n - 1]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}
return -1;
}
}