峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞。
示例 1:
输入: nums = [1,2,3,1]
输出: 2
解释: 3 是峰值元素,你的函数应该返回其索引 2。
示例 2:
输入: nums = [1,2,1,3,5,6,4]
输出: 1 或 5
解释: 你的函数可以返回索引 1,其峰值元素为 2;
或者返回索引 5, 其峰值元素为 6。
思路:
二分查找大的那一半一定会有峰值(即nums[mid]<nums[mid+1]时,mid+1~N一定存在峰值)首先已知nums[mid+1]>nums[mid],那么mid+2只有两种可能,
- 一个是大于mid+1,大于mid+1的情况,继续向右推,如果一直到数组的末尾都是大于的,那么可以肯定最后一个元素是峰值,因为nums[nums.length]=负无穷
- 一个是小于mid+1,小于mid+1的情况,那么mid+1就是峰值,
class Solution(object):
def findPeakElement(self, nums):
low,high=0,len(nums)-1
while low<high:
mid = low + (high - low)/2
if nums[mid+1] > nums[mid]:
low=mid+1
else:
high = mid
return low
给定一个Excel表格中的列名称,返回其相应的列序号。
例如,
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: “A”
输出: 1
示例 2:
输入: “AB”
输出: 28
class Solution {
public static int titleToNumber(String s) {
char[] chas = s.toCharArray();
int num = 0;
for (char c : chas) {
num = num * 26 + c-'A'+1;
}
return num;
}
}
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明:
输出结果可能非常大,所以你需要返回一个字符串而不是整数。
class Solution {
public static String largestNumber(int[] nums) {
Integer inums[] = new Integer[nums.length];
for (int i = 0; i < inums.length; i++) {
inums[i] = nums[i];
}
Arrays.sort(inums, (a, b) -> (b + "" + a).compareTo(a + "" + b));
return inums[0] == 0 ? 0 + "" : Arrays.toString(inums).replaceAll("[\\D]", "");
}
}
class Solution(object):
def rotate(self, nums, k):
k%=len(nums)
i=0
for num in nums[-k:]+nums[:-k]:
nums[i] = num
i+=1
翻转三次即可
void rotate(int* nums, int numsSize, int k){
if(k>=numsSize)
k %= numsSize;
reverse(nums,0,numsSize-k-1);
reverse(nums,numsSize-k,numsSize-1);
reverse(nums,0,numsSize-1);
}
每次将最后一个数移动到头部,重复k次
class Solution(object):
def rotate(self, nums, k):
l = len(nums)
k%=l
while k:
k-=1
tmp = nums[-1]
i = l-1
while i>0:
nums[i] = nums[i-1]
i-=1
nums[0] = tmp
return nums
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k %= n;
for (int i = 0; i < k; i++) {
int temp = nums[n - 1];
//从0..n-2位置的数复制1..n-1
System.arraycopy(nums,0,nums,1,n-1);
nums[0] = temp;
}
}
}
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
思路:
每次n & n-1得到消去n最后一位二进制为1的数
class Solution(object):
def hammingWeight(self, n):
cnt = 0
while n:
n = n & n-1
cnt+=1
return cnt